컴공 일기253
게시글 주소: https://orbi.kr/00070242684
한 번쯤은 생각해 볼 법한 예제라서 가져왔습니다. 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를 선물하세요.
-
번호를 내놔라 0
전화를 해주마
-
퀀텀에서 딸치는 놈 있었음 그때 스릴감이 지렸는데 후..
-
박제완뇨 0
-
탑툰 보러감 0
-
이거 친구랑 친구여친이 같이 게시글 올린거 좋아요 눌렀는데 왜 친구여친 게시글에만...
-
큼 그러다가 현실에서 만나고 친해지면 그게 친구 아닌가싶음 어쩌다 친해졌냐고는 잘안물어보니까
-
오늘의 아침 2
불닭+공화춘 참치마요 삼김
-
ㅋㅋㅋㅋㅋㅋ
-
난 공용에서 코딱지 파먹는 사람 봄
-
3년간 내적 친밀감 ㅈㄴ쌓였는데 이렇게 가면...
-
대충 미즈키 짤
-
얼버기 4
ㅎㅇ
-
일단 살좀 빼야 도전가능할듯
-
정수기가 없다는 사실이 나를 미치게함 냉라면 못먹겠네 쿠지라이식 라면이나 먹어야겠다...
-
자려고 누웠는데 잠이 안와서 가장 기억에 남는 글이랑 혜윰님 댓글 달린글 빼고 다...
-
고로 매우 마초적인 행위라고 할 수 있음
-
오늘부터 제 제1 모토는 서로 사랑하며 살자 입니다
-
객관적으론 진짜 개빡센 문제일텐데 또 굇수가 오셔서 20초컷 하실 거 같음..
-
나도 웃어서 뭐라 못하겠다 그니까 복면강도 컨셉 ㅇㅈ이나 보고가셈
-
제가 프세카에서 좋아하는 친구인데 얘랑 키 똑같다면서 플러팅 먼저 했잖아요 빨리 해줘요 급함
-
본계정에 여자 비키니사진 좋아요 수만개는 눌러둔거같은데 이거 언제지우냐 대학 가기전까지 지워야하는데
-
없으면 빛삭
-
과시는 결핍이다 5
과시하는 사람은 보통 어딘가에서 결핍이나 열등감을 느끼는 경우가 많았던 거 같음. 아님 말고
-
옛날엔 오르비좃목 -> 옯스타,오픈채팅 -> 실제만남 많앗는데
-
와 저건 진짜 심하다
-
타비비토노요오니 0
우타카라우타에
-
X카스 같은 매력이 있는듯 인증을 볼때마다 아 괜히봤네; 싶지만 쉽게 끊지 못하는...
-
강아지 잔다 3
기여워요
-
돈으로 환전 가능함?
-
내년에같이컨설팅팀차릴분 19
70만원은 너무 비싸니깐 40~50정도로 가격으로 경쟁력을 가져가는거임 거기에다...
-
와
-
방금 시대갤에서 보고 생각난건데 현장에서 1번 보고 너무 대놓고 맞는말만 해서...
-
오늘만큼은 goat인거야
-
실검 1위 찍고 갑니다 10
ㅂㅇ
-
진짜 조심해야하는건 허언증보다는 나르임 허언증은 그냥 정신이 미성숙하고 귀여운거임...
-
진짜 라이트하고 건전하게 하는중임
-
빼는 건 그저 그런데 빼고 나서 구멍생기는 게 비호임
-
4합 3 이내를 이렇게 맞추는거였구나
-
왜메인두개갔지 0
-
이참에 딴 사진도 올림 13
임마들은 얼굴안나와서 안지움 우하하
-
이말만 몇번째냐.. 자고 일어나면 밤까진 안들어오는걸 목표로 할게요 응..
-
과잠 꼭 입어보고 싶은데 찾아보니까 1학년은 과잠이 없고 2학년 전공선택때...
-
그냥 간단하게 답변함
-
심심해요
-
스터딘 마크2 신가
-
ㅈㄱㄴ
-
고닥교 친구중에 이재명닮은 애 있었는데 맨날 찢재명이라 놀리다가 크게 혼남
-
ㅁㅌㅊ임
-
화.학혁명님 그립습니다 18
오르비에선 그렇게까지 나쁜새끼는 아니였는데..
이런 공부는 무슨 책으로 어떻게 하면 될까요?
주로 컴퓨터구조 전공 서적이나, C 전공 서적을 참조하시면 공부할 수 있습니다. 추가적으로 여기에 사용되었던 부호화된 2의 보수법이나, 부호비트, 비트연산 같은 경우는 논리회로라는 과목으로도 충분히 커버할 수 있는 내용이지요. 한빛미디어에서 나온 <디지털 논리회로> 책을 한 번 일별해보시는 것도 추천드립니다.
양이 워낙 방대하긴 하지만, 쭉 읽다 보면 컴퓨터라는 게 어떤 방식으로 작동하게 되는지 개략적으로 알 수 있을 겁니다.
감사합니다!!
컴공주님 혹시 그 책 완독하셨나요? 방학때 전공 대비로 공부해보려 하는데, 혹시 읽어보셨다면 후기 적어주신다면 감사하겠습니다
문제가 워낙 방대해서 문제를 다 풀진 않았습니다만, 내용 같은 경우는 완독했습니다. 다름이 아니라, 수업에서 채택한 교재였어서 아무래도 디테일하게 읽을 수밖에 없었죠.
다만, 시험이 아닌 공부적 관점에서는 헷갈리거나 모르는 것들 위주로 발췌독하는 것이 좋을 듯 합니다. 논리회로 특성 상, 컴퓨터 구조와 연관성이 아주 긴밀하기 때문에 컴구에서 회로적 관점에서 헷갈리는 부분이 있을 때 자주 발췌해서 봤죠.