컴공 일기252
한 번쯤은 생각해 볼 법한 예제라서 가져왔습니다. C를 한 번이라도 배워보셨던 분은 한번 풀어보셔도 괜찮아 보이네요.
int main()
{
unsigned int num1 = -1;
unsigned char num2 = -1;
printf(“%d %d”, num1, num2);
}
정답은 -1 255가 됩니다.
서식지정자 %d의 작동 메커니즘과 부호 비트에 관해 어느 정도 상세히 알아야 풀 수 있는 문제입니다.
unsigned int는 기본적으로 부호비트가 없는 32비트이고 부호화 2의 보수법에 의거해 2진수로 나타내면
num1 = 1111…11((32개)가 됩니다. 다시 말해 실질적으로 num1에 들어가는 값은 -1이 아닙니다.
-1을 부호화 2의 보수법에 의거해 2진수로 나타내면 1111….1(32개)인데, unsigned int라는 형에 의해 마지막 1이 부호비트로 해석되지 않아 2^32-1이 최종적인 값으로 num1에 대입됩니다.
마찬가지로 unsigned char는 8비트이므로 num2 = 111..1(8개) = 255가 되겠지요.
여기까지 생각한다면 결괏값은 2^32-1 255가 되어야 할 것 같지만, 함정이 하나 더 있습니다.
서식지정자 %d의 메카니즘.
%d라는 서식지정자는 32비트 2진수를 10진수(decimal)로 재해석해서 콘솔에 출력하라는 의미입니다.
그런데, 여기서 %d에서는 부호비트를 적용하게 되지요.
즉 1111…1(32개) = -1이 되어 출력됩니다.
그렇다면 8비트짜리는요? 32비트 10진수를 출력해야 하는데.. 24비트가 부족하게 되지요. 그렇다면 형식에 24비트를 채워야 합니다. 어떤 방식으로 채워야 할까요? 기존의 8비트짜리 변수가 음수라면 1을 채우고, 양수라면 0을 채웁니다.
111..1(8개) = 255이고, 이 자체가 양수로 평가되므로 %d 서식지정자에 의해 000…011111111이 num2에 해당하게 됩니다. 마지막 비트에 해당하는 부호비트가 0이므로, 255가 그대로 출력되게 됩니다.
아주 간단한 예제지만, 컴퓨터 구조를 꽤 정확하게 알고 있어야 도출할 수 있는 예제가 되겠군요.
0 XDK (+0)
유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.
-
통장에 3
181원있음 머지
-
ㅇㅇ 사실 굉장히 잘 만남 살아보면서 느낀건데 능력있는 남자 = 예쁜 여자와...
-
성적 이정도인데 설컴은 안될거 같고 서울대 첨융이랑 연대 컴공이랑 붙으면 어디...
-
공부나 하라는 신의계시인가보다
-
코스트코나 트레이더스 가까움?
-
못지우는애들이 많을까 밖에선 일코하세요
-
[뉴테크] 척수손상 환자 다시 걸었다…뇌 심부자극으로 재활속도 높여 1
스위스 연구진, 보행에 영향 주는 뇌영역 찾아 환자의 뇌 깊은 곳에 전기자극,...
-
마음가짐 공부법 등등 삼수 꿀팁? 있나요
-
생명 44 백분위 11
1컷이 45인게 주된 의견인거 같아서 ㅠㅠ 1컷이 45일때 44점 백분위는...
-
전문직은 일생을 살아가면서 남들이 자신을 보는 평가, 사회적 시선이 자신의 능력을...
-
아가 기상 9
안뇽
-
동덕여대 이슈 4
때문에 이대랑 숙대 선호도도 타격 있을까요?
-
과탐 가산점 6
과탐 가산점 3%, 5% 가 어느 정도인지 체감이 잘 안 가는데 얼마나 영향을 미치나요?
-
과탐 유지 0
내년 수능 연고 서성한 계약학과 목표로 하고있는데 과탐을 계속 해야할까요?
-
9모 55552 10모 풀 5등급입니다 국어 강기본(2월까지) 강기분 실모 수학...
-
17:45 B조 풀리그 T1 VS 농심 21:30 B조 풀리그 T1 VS DK
-
미적분 1년공부 12
현우진 캐스트에서 미적분 1년가지고는 어렵다던데 진짜 그런가요? 미적 안해봣는데...
-
고2 정시 4
현재 예비 고2 이고 고1 내신 4.초중반입니다 지방에 있지만 전국적으로는 평반고에...
-
치대에선 공부시킬게 너무 없어서 깜지쓰기 시킴
-
이 분 뭐임?? 다 맞추셨네 ㅋㅋㅋ
-
초콜릿 크림이 올려져 있는 폭신폭신한 빵이네요. 하지만, 아침 식사로 한낱 초콜릿...
-
춥다 2
아침마다 나오기가 너무 싫어
-
미적 기하 선택 4
예비 고3이고 미적할지 기하할지 고민중입니다 재수는 죽어도 하기 싫어서 1년안에...
-
앗차차 그거슨 의대생이 아니라 여대생이었구요
-
정신병 있으면 군대도 안가 처벌도 안받아 딱히 불이익도 없어 이쯤되면 정신병...
-
기상입니다 여러분
-
오르비의 정상화
-
칼기상 16
베개 없어서 수건 말아서 베고잠
-
이제 매일 7시간 이상 공부하려고 합니다 큰 이유는 없고 그렇게 마음을 먹었기...
-
여캐일러 투척 14
4일차
-
어제 2시에자ㅏ서 진짜 즉을거가ㅏ네
-
아침 8시에 자서 오후 5시에 일어나는 삶을 사는중.. 8
그런 의미에서 자러감 좋은밤되세요
-
사탐런 골라주샘 7
07 이번 결방학때 수학 현우진 ㅈㄴㅈㄴ달릴거고 미적은 노베임 국어 2 영어1...
-
뭐부터보지 2
3D는. 처음이라 잘 몰라
-
기차지나간당 2
As a general rule, historians find it...
-
안녕하세요 12
잘 주무셨나요
-
요즘 불안해서 잠을 안 자려고 하다보니까 오후12시 이렇게 자고 그랬는데 오늘은...
-
이원준t 수업 어떻게 들어야 하냐고 물어보네요... 몇개월 전에 내 모습이 겹쳐보였어
-
이거 재밌음? 드라마 잘 안 보긴 함
-
언제적 드라마지 1
프로듀사<<<<<이거보고 PD꿈생기긴함
-
얼버기 6
-
이 녀석이 초대형 거인이야
-
ㅈㄱㄴ 3학년 2학기때 개조짐 육군 기행병 간다는 생각으로 해야할듯
-
과 상관없습니다
-
삼차함수 세실근합 일차함수 빼도 똑같은 건 ok 근데 문제 풀다보면 상수를 빼도...
이런 공부는 무슨 책으로 어떻게 하면 될까요?
주로 컴퓨터구조 전공 서적이나, C 전공 서적을 참조하시면 공부할 수 있습니다. 추가적으로 여기에 사용되었던 부호화된 2의 보수법이나, 부호비트, 비트연산 같은 경우는 논리회로라는 과목으로도 충분히 커버할 수 있는 내용이지요. 한빛미디어에서 나온 <디지털 논리회로> 책을 한 번 일별해보시는 것도 추천드립니다.
양이 워낙 방대하긴 하지만, 쭉 읽다 보면 컴퓨터라는 게 어떤 방식으로 작동하게 되는지 개략적으로 알 수 있을 겁니다.
감사합니다!!
컴공주님 혹시 그 책 완독하셨나요? 방학때 전공 대비로 공부해보려 하는데, 혹시 읽어보셨다면 후기 적어주신다면 감사하겠습니다
문제가 워낙 방대해서 문제를 다 풀진 않았습니다만, 내용 같은 경우는 완독했습니다. 다름이 아니라, 수업에서 채택한 교재였어서 아무래도 디테일하게 읽을 수밖에 없었죠.
다만, 시험이 아닌 공부적 관점에서는 헷갈리거나 모르는 것들 위주로 발췌독하는 것이 좋을 듯 합니다. 논리회로 특성 상, 컴퓨터 구조와 연관성이 아주 긴밀하기 때문에 컴구에서 회로적 관점에서 헷갈리는 부분이 있을 때 자주 발췌해서 봤죠.