컴공 일기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를 선물하세요.
-
담배도 막 피면서 술마시고 싶은 밤임
-
세상이 밉구나
-
고2인거같고 내일부터 시험보는 거 같은데 번따하면 방해되겠지 ㅠ
-
나여붕이들도공평하게좋아한다고 그러니까여부이들도쪽지줘~우웅
-
계속 할 듯
-
흑흑 21
나도 sos단, 고전부, 방과후티타임, 결속밴드, 슈치인학생회, 극동마술낮잠결사,...
-
아빠(애비새끼)란 놈이 한달에 한번은 술먹고 폭력쓰면서 엄마랑,저 때리고 어릴때는...
-
서성한 될까요 10
-
지듣노 8
goat
-
막 화가 남 나도 원래 그런 성격이지만 이리저리 치이고 군대 가고 나이 먹으니까...
-
기상이변에 대한 강의였다.
-
이건 팩트임
-
목동 시대 이번에 시간표 뜬거에는 과탐들 만점완성이라 나와있고, 작년 대치 시대...
-
농대 사범대 가능한가요?교차는 한문 5라 에바같기도...
-
근데 2
샤프에 바로 들어가있는 샤프심이랑 안에 들어있는 샤프심이랑 길이 다르던데 들어가있는...
-
확통 기하중에 뭐가 더 나을까요? 별 상관 없으려나..
-
시대 미적 7
예비고3 겨울 미적 단과 안가람T, 장재원T 누가 더 나음 고2 모고 기준 낮1~높2
-
거기에 중독되면 안댐 다 허상임
-
성의에 따라 양이 달라집니다
-
. 4
-
둘 중 어디가 레베루가 높음? 엄빠 하루종일 싸운다 제발 답변좀
-
시대컷 지구 컷 14
2컷 40이요? ㅋㅋㅋㅋ 2컷 39여야한다고 ㅋㅋㅋ 진짜 지1 개망했네 ㅋㅋ
-
ㅠㅠ 5
-
입성 3
-
74하면 두줄 뜨니까ㅎㅎ
-
저두 이미지 적어줘요 10
뉴비라 아시는 분 별로 없을 것 같지만.... ((슬쩍
-
이미지 메타특 16
나같은 뉴비 옯아싸는 댓글 1~2개밖에 안달려서 무안해서 못낌. 나쁜 메타
-
김승리 매월승리 0
저번꺼 얼마였음?
-
보던 책이나 봐야지 10
뭔 공부야 ㅋㅋ 내일 월요일이니 내일부터~~
-
저도 이미지 적어주세여 11
갑자기 이미지메타네
-
제발 붙게해주세요...
-
맞나?ㅋㅋ
-
고2입니다 사탐런 할까요 말까요... 이번 수능 3 1점차인가로 떴고 9모 2 걸쳤습니다
-
하 제발
-
23수능 51111 연치 정시 합격 <<이거 ㄹㅇ임? 아니 31111 경희의는...
-
실채 나오면 칸수 더 떨어질텐데 .. 하 인문논술 갈 걸 우울하네요 ..
-
지금 고트라고 유명해진 국어쌤 옛날부터 알았는데 내년 커리 보니까 시즌 초반...
-
선대특 11
행렬식 구하는법 배우는 과목
-
중학도형은 개싫어했는데 삼각함수 도형은 꽤 할만했어요 수학 머리 그냥 그래서 발상...
-
ㄹㅇㄹㅇ
-
으흐흐
-
대학교 1학년인 나 . 연세 약학대학원 1학년인 너 1
현재 연락중인 그녀 연세약학대학원 1학년에 들어갈 예정인데 현실적으로 너무...
-
숫자 위에 해모양이 나와야 온풍기 모드인데 아니 ㅅㅂ 분명 해 떴는데 찬바람만...
-
약대 절실한데 가능할까요?? 아주대 가고싶은데.. 아주대는 어려울까요ㅠㅠ.. 언매...
-
수능과목으로 물생 공부하던 사람입니다. 물리 이규철t 듣다가 이번에 입대하셔서 다른...
-
문제는 이미 3-1학기에 미적을 넣어놧다는것임... (못 바꿈) 기하는 지금...
-
집이 빵빵해서 낭만적인 선택이 가능하다면 어디 가고 싶음? 난 설물천 물리학전공
이런 공부는 무슨 책으로 어떻게 하면 될까요?
주로 컴퓨터구조 전공 서적이나, C 전공 서적을 참조하시면 공부할 수 있습니다. 추가적으로 여기에 사용되었던 부호화된 2의 보수법이나, 부호비트, 비트연산 같은 경우는 논리회로라는 과목으로도 충분히 커버할 수 있는 내용이지요. 한빛미디어에서 나온 <디지털 논리회로> 책을 한 번 일별해보시는 것도 추천드립니다.
양이 워낙 방대하긴 하지만, 쭉 읽다 보면 컴퓨터라는 게 어떤 방식으로 작동하게 되는지 개략적으로 알 수 있을 겁니다.
감사합니다!!