컴공 일기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를 선물하세요.
-
결심했다 2
1학기 다니고 2학기 휴학한 후 연치,경희치 노려야겠다 많이 어렵겠지만 할 수 있으면 좋겠다
-
ㅂ
-
잠이 안 온다 1
-
이거 확통에서 배우는거아님? 어떤 3끼가 고등수학 테마로 질문했는데...
-
닉네임 뭐지을까 하다가 좋아하는 색깔 + 그 색하면 떠오르는거 합쳐서 짓기로 하고...
-
예술을하고싶구나 1
그래..
-
그치만나는지성인이기에밖을나선다
-
생존하기위해서 일하고싶지 않음 답답하다
-
얼버잠 1
.
-
얼버기 5
ㅎㅇ요
-
오옹 5
마지막에 절엇네
-
공허하다 1
뭘위해사는거지
-
라면에 청양넣기 2
Goat
-
화상키고 얼굴 가리고 애니 사진 넣고 해야되나
-
과외좀 1
수학
-
타임루프 잘못해서 고딩 때로 가면 사고야
-
아직도 시간표 안 짜놓음 ㅁㅌㅊ?
-
자고싶다 1
..
-
나랄걱정햇럿너요
-
심지어 개총 다음 날 수업 4개 6시에 끝남 이걸 가 말아.. 에휴
-
으휴
-
문디컬 수준은 받아야 함요?
-
오르비망했네TV 2
굿다이노
-
오르비 안녕히주무세요 16
해 뜨고 봐요
-
나의 작아진 아집을 띄우네 저기 요단강에 휩쓸리지 않게 나를 붙잡아줄 사람 여기 어디없나
-
오르비는근데 4
규토 N제로 접하기만 해서 먼가 여기 글쓰니까 되게신기함
-
이 시간까지 처음 있어보는데 진짜 얼버기가 존재하는거야 ????
-
현재를 사는 게 힘드네
-
우우 16
우우
-
수학 기출 공부 0
지금시기에 기출보고 2등급 이상 나오면 N제 풀다가 다시 기출 보나요? 아니면...
-
많이 하시나요 저는 사랑해는 굉장히 아끼는 편 혼난 적도 많음
-
이건좀아닌데 2
몸무게 56달성 좀잇으면 60찍겟는걸 어쩐지 바지가 끼더라 3월안에 원상복구한다…....
-
안뇽 그냥 눈팅하다가 써봣어 올비는 근데 원래 자동로그아웃됨¿ 킬때마다 나가지던데...
-
공하싫 1
에휴이
-
날 엄청나게 끌어당김
-
안녕하세요 대전에 사는 어느 곧 3학년이 되는 학생입니다 수시를 포기하고 정시에...
-
결혼하고싶다 4
인생이 끝날 때까지 나와 항상 함께 할 사람이 있다는 건 상상만해도 벅차는 일이네요
-
보고후기알려줌 ㅋㅋ 밤샌상태로가서 도중에 자느라 후기못남길수도 ㅋㅋ
-
새벽공기가 나를 부른다••
-
연대 언홍영 0
연대 언홍영 점공 보내주실분 있나요??
-
취미생활 ㅇㅈ 4
는 기타
-
세계지리 세지 0
세계지리 문제 지금 마더텅이랑 수특 풀고있는데 다 풀고 뭐 풀어야하나요?
-
벌써 수능이 8달밖에 안 남았다니
-
ㅂㅂ 0
-
글 1
글입니다
이런 공부는 무슨 책으로 어떻게 하면 될까요?
주로 컴퓨터구조 전공 서적이나, C 전공 서적을 참조하시면 공부할 수 있습니다. 추가적으로 여기에 사용되었던 부호화된 2의 보수법이나, 부호비트, 비트연산 같은 경우는 논리회로라는 과목으로도 충분히 커버할 수 있는 내용이지요. 한빛미디어에서 나온 <디지털 논리회로> 책을 한 번 일별해보시는 것도 추천드립니다.
양이 워낙 방대하긴 하지만, 쭉 읽다 보면 컴퓨터라는 게 어떤 방식으로 작동하게 되는지 개략적으로 알 수 있을 겁니다.
감사합니다!!
컴공주님 혹시 그 책 완독하셨나요? 방학때 전공 대비로 공부해보려 하는데, 혹시 읽어보셨다면 후기 적어주신다면 감사하겠습니다
문제가 워낙 방대해서 문제를 다 풀진 않았습니다만, 내용 같은 경우는 완독했습니다. 다름이 아니라, 수업에서 채택한 교재였어서 아무래도 디테일하게 읽을 수밖에 없었죠.
다만, 시험이 아닌 공부적 관점에서는 헷갈리거나 모르는 것들 위주로 발췌독하는 것이 좋을 듯 합니다. 논리회로 특성 상, 컴퓨터 구조와 연관성이 아주 긴밀하기 때문에 컴구에서 회로적 관점에서 헷갈리는 부분이 있을 때 자주 발췌해서 봤죠.