컴공 일기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를 선물하세요.
-
이거 누구 닮은것같음 14
보면볼수록 똑같은듯 ㄷㄷㄷ
-
오늘 생기부 나왔는데 생각한 것보다 정말 별로로 나온 것 같아서요,, 분면...
-
나 같은 베타메일은 어찌 살라고
-
과목은 생윤ㅇㅇ 기시감 실개완 두 개 그대로 쓰고싶음 돈 아까운데… 작년 거 그대로...
-
연고대, 성대 한양대가 교과반영하는걸로 아는데 영향력이 어느정도인지 궁금해서요...
-
동아리 신청했다 4
면접도 본다는데 ㅈㅂㅈㅂ 가입하고싶다 ㅠㅠ
-
수학에재능이없나 8
2점은좀아닌데;;
-
사업은 잘할만한게 없고 투자는 시드가 쥐똥꼬구나,,,
-
지로함 수2 해야겟다
-
ㅈㄱㄴ
-
캬 캬 캬 1
-
실력이 올랐는지 확신이 안드네요...3모가 기대되면서도 두렵다..
-
퀄리티 생각하면 비싼건 아니다만 한국 수능시장 가격이랑 비교하니 비싸보이는군
-
아 이건 못 하겠다
-
타고난 근수저 2
-
..?
-
고민이많음
-
목 풀기 ㅇㅈ 2
-
노래 추천 받아요 흐흐
-
전 문과 서성한 이과 중경시까지라 생각(저 중앙대 물리버리고 시립대 전전컴가서...
-
스미마생 스미마생 다이죠부 하면서 애니 프사 욕하는 발언 취소했을텐데
-
ㄷㄷㄷㄷ
-
이런 내 모습 실망하지 말아요
-
3대 5 4
단위는 '톤'
-
그러니까 저메추좀 ㅎㅎㅎ
-
ㅅㅂ
-
왤케싸냐
-
전 아직 안 재봐서 모르겠네요..
-
서브웨이만 일퀘해야지❤️
-
흠.. 13
공부하기 싫당.. 그래도 해야겠지..
-
애니프사 달까 3
애니프사단들 공부 개잘하던데
-
배송 월요일안에 못 온다는데 걍 환불할까요
-
머리가 나쁘면 노오력이라도 하라는 이유(작년 9평) 2
부등호 좌우변 동시 성립하는거 발상적이라는 사람이 많아서 사실 이미 한번 나왔긴함...
-
”우울“ 우우우웅
-
조금 늦었습니다. 사실 더 일찍 올릴 수도 있었으나 귀차니즘으로.. 죄송합니다 저는...
-
흐음..
-
운동임 진짜 잡생각 안나고 좋음 적당하게 운동 하면 바로 자기도 좋고 개빡세게 하면...
-
화2 좀 해볼까 4
2단원까지는 아는데
-
걍 지금시즌엔 자기가 커리타는 강사가 최고라 생각하셈 4
그래야 마음이 편해
-
교양임
-
헬스메타? 6
다이어트 1일차.. 저녁으로는 닭가슴살 100g에 사과 1개 방토3개 근데 배고파서...
-
ㅜㅜㅜ
-
대성vs메가 0
대성은 이미지 이영수 메가는 강민철 이기상 윤성훈 둘 다 사는게 베스트이긴한데…
-
그래도 존나 힘들어서 상체를 사랑하는 편임.
-
뭔 10초 주기로 코 훌쩍거리네.. 그럴 시간에 걍 코 풀고 오겠다
-
범위는 고체지구입니다 답에 논리적오류가있을수도있어요 ㅠㅠ
-
다음날 삭제 ㅋㅋ
-
할 때마다 자살할까 하체할까 진지한 고민과 함께 하는데
이런 공부는 무슨 책으로 어떻게 하면 될까요?
주로 컴퓨터구조 전공 서적이나, C 전공 서적을 참조하시면 공부할 수 있습니다. 추가적으로 여기에 사용되었던 부호화된 2의 보수법이나, 부호비트, 비트연산 같은 경우는 논리회로라는 과목으로도 충분히 커버할 수 있는 내용이지요. 한빛미디어에서 나온 <디지털 논리회로> 책을 한 번 일별해보시는 것도 추천드립니다.
양이 워낙 방대하긴 하지만, 쭉 읽다 보면 컴퓨터라는 게 어떤 방식으로 작동하게 되는지 개략적으로 알 수 있을 겁니다.
감사합니다!!
컴공주님 혹시 그 책 완독하셨나요? 방학때 전공 대비로 공부해보려 하는데, 혹시 읽어보셨다면 후기 적어주신다면 감사하겠습니다
문제가 워낙 방대해서 문제를 다 풀진 않았습니다만, 내용 같은 경우는 완독했습니다. 다름이 아니라, 수업에서 채택한 교재였어서 아무래도 디테일하게 읽을 수밖에 없었죠.
다만, 시험이 아닌 공부적 관점에서는 헷갈리거나 모르는 것들 위주로 발췌독하는 것이 좋을 듯 합니다. 논리회로 특성 상, 컴퓨터 구조와 연관성이 아주 긴밀하기 때문에 컴구에서 회로적 관점에서 헷갈리는 부분이 있을 때 자주 발췌해서 봤죠.