컴공 일기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-2 중간고사 평균 98.1로 전교 2등한거랑 고3 10모 국수탐...
-
반박 안 받음
-
왜냐면 그럼 난 면제나 공익이니까..
-
아묻따 생윤사문이 맞나요
-
에라 모르겠다 0
낙지 실지원 987칸으로 박아놔야지 ㅋㅋ
-
학교 선생이 주제 같은거 ㅂㅅ 같이 잡아놔도 그거라고 따라가야 함 ㅈ 같네 ㅋㅋㅋㅋ
-
반박시팥첩
-
국어 유기하고 수학만 파는거 어떻게 생각하시나요?? 영어 간간히 하고
-
군대 + 학부 + 석박사 존나 빠르게 딴다쳐도 8~9년임뇨
-
기원합니다
-
어차피 나 죽으면 이세상은 다 끝나는거라고 생각함 그리고 내 한 몸 부지하기도...
-
ㄹㅇ
-
오늘 용잡고 겉날개 5개 얻음
-
일단 키가 2컷이니 얼굴 6등급이라고 치고 4등급 맞는듯뇨
-
그래도7등급은됨뇨
-
오늘은 탕수육 대짜만 벌자
-
그러기엔 외모9등급이라 운동이랑 피부관리부터 하는중….
-
과제랑 이것저것 하려고 샀는데 과제 -> 수업 전부 다 중간기말만 봄 웹서핑 ->...
-
결혼 빨리 하고 싶은데 39
자식 2명 정도는 낳고 싶음
-
배성민vs정병호 0
누구들을까요 이번 수능 4떳고 배성민은 빌드업부터 정병호는 프메 기본부터 들을거...
-
결혼메타구뇨 6
20대 후반이 목표에요
-
ㄹㅇ이..
-
운동도 안하고 만날 사람도 없으면 잘 안 씻게 됨뇨 8
사실임뇨
-
감각적 직관 +-1 정도
-
내년 사탐공대 2
대학마다 내년도 정시에서 과목별 반영비율이랑 사탐 가능 대학 발표는 언제 하나요?
-
땀이 줙내 나는게 어케 안 씻지 하루에 2번정도는 씻는게 맞음뇨
-
이제 누가 방송해주냐....
-
솔직히 개별주식은 내가 한다고 되는것도 아닌것 같은데, 관심도 너무 많이 필요한 것...
-
작년에 이어 올해도 어김없이 수능이 끝나고 군수 물어보는 분들이 많은데요, 수능도...
-
머리를 안 감는다가 아니고 굳이 "매일" 감지 않는다임 4
땀이 안 나니까 괜찮다고 생각해오
-
?
-
대학원 갔다오면 하.. 30 중반은 되야할지도
-
마킹병 치료좀요 작수 수학 주관식 마킹 잘못했어서 불안해뒤지겠음 6
요새 약간 일상생활도 안될정도로 알 수 없는 이유로 불안한데 마킹 << 이새끼도...
-
발 시려워서 난 양말 신고 자는데
-
진지하게
-
만약 한번더하면 나이상 5수고 실질적 3수인데 화미영생지 순서로 작수 65667->...
-
어떻게된게 의대 2000명을 늘렸는데 정시가 작년이랑 똑같냐
-
ㄱ
-
성균관대 영상학과 가능한가요 ?
-
망해도 망해도 저같은 사람이 있나 싶은데 결론 먼저 말씀드리면 현역 재수 성적이...
-
진짜 사람인가
-
근데 안 맞아도 사탐이라 꾸역꾸역하니까 되긴하던데 그래도 좀 강의 들어보고 생각해보셈뇨
-
먼 사탐런이여 4
어휴
-
솔직히 사탐 좀 짜침 13
우리 낭만찾아 화학으로갑시다
-
김승리 1
김승리 현강에서 올오카 오리진 해주나요? 아니면 따로 들어야하나요?
-
외대는 변표나 가산점 따로 없는 걸로 알고 있어서 작년 70% 컷확인해보니...
-
의사비판 과탐비판 가장 많은댓글과 욕을 드시게 될 것입니다
-
그냥 궁금한데 4
우린 왜 국영수라 부를까 사실 국수영순서로 수능보는데 국영수사과라하잖어
이런 공부는 무슨 책으로 어떻게 하면 될까요?
주로 컴퓨터구조 전공 서적이나, C 전공 서적을 참조하시면 공부할 수 있습니다. 추가적으로 여기에 사용되었던 부호화된 2의 보수법이나, 부호비트, 비트연산 같은 경우는 논리회로라는 과목으로도 충분히 커버할 수 있는 내용이지요. 한빛미디어에서 나온 <디지털 논리회로> 책을 한 번 일별해보시는 것도 추천드립니다.
양이 워낙 방대하긴 하지만, 쭉 읽다 보면 컴퓨터라는 게 어떤 방식으로 작동하게 되는지 개략적으로 알 수 있을 겁니다.
감사합니다!!
컴공주님 혹시 그 책 완독하셨나요? 방학때 전공 대비로 공부해보려 하는데, 혹시 읽어보셨다면 후기 적어주신다면 감사하겠습니다