컴공 일기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
언매 3~4틀 유지 중이고 전부 2등급이였는데 화작으로 갈아타면 점수 많이 오를 가능성 있다고 봄?
-
미적 2컷 의견이 너무 갈리네 어디에선 원점수 80이면 무조건 2등급이라 하고...
-
지금 시발점 끝내고 자이 기출 푸는데 별 1개짜리 정답률 60퍼 문제도 여러개...
-
최저를 물생에서 물지로 맞추려는데 전교1등 친구들 포함 지1을 들어봤던 친구들은 다...
-
6평 어디서 보지 12
모교는 애매한데
-
스타벅스 질문 2
아아메 두잔짜리 쿠폰있는데 한잔 한잔으로 나눠먹을수있나용?
-
평가원 #~#
-
"예비 재수생" 고3때 만족할만한 성적 받고 대학 가는건 뭐냐고요? 그분들은 조기...
-
설약을 416.5를 잡고있네 설치를 잘못본줄? ㅋㅋㅋㅋㅋ
-
강아지 7
보고싶구나 집가고싶다 고양이카페도 가보고싶다
-
오엠알 밀린거말고 중복체크나 인식안돼서 오류떴던 경험 있는분있나요 ??
-
닥전인가요? 참고로 여자임
-
사탐 0
사문은 낄건데 정법 생윤 ㅈㄴ고민되네 진짜
-
노래방 다녀오겠음뇨 10
1시간 간다
-
일반적으로 얼마정도 쓰는지 궁금해요 주로 어디에 돈을 쓰는지도 궁금해요
-
이거 단국 인문 낮과는 가능하겠죠?? 원서철에 칸수 떨어진다고들 그러는데 하
-
저점매수on
-
삼수과탐 3
현역 재수 둘 다 생1지1 해ㅛ는데 재수 때 생명 6 9 수능 50 44 45 지구...
-
물론 전 못 봄.
-
“진짜 광기” 0
“....저는 그냥 아서 플렉이에요“
-
저의 빅데이터에서 나온 추론임뇨
-
대학진학해서 그냥저냥 학점 무난하게 챙기면서 노는게 목표라서 아무학과나 추천...
-
우리는 영웅을 기다린다.
-
오늘 콘서트래…
-
아 파트 아파트 아 파트 아파트
-
말장난 없고 뒷통수 안 치고 공부 한대로 점수 나오는.. 동사죠? 자퇴생이라서 시간은 많습니다
-
저 근데 몇살겉음? 10
ㄹㅇ로
-
물리적 세계에서 세 번 어디로든 갈 수 있는 신발이 있다면 4
어딜 가보고 싶은지 적어보고 가시죠
-
광활한 우주에서 보이는 건 너 하나꿈에서 나타나네가 찾던 그 소녀있잖아 over,...
-
할까 말까 2
골라주세요
-
일주일에 1번이 최고 효율 같습니다. 반박 받을까 말까.
-
미적분이 너무 하기 싫은데 학원에서 해오래요 억지로 해야될 것 같은데 공부하기 싫을...
-
원래 영어는 다풀고 15분 남기긴 한데 역대급 풀틀 많았던 시험지 2받기는 개쉬운데...
-
N수생들 덤벼라 27
team 07 필요없음뇨, 나 혼자 여포가 되겟음
-
ㅇㅅㅇ
-
뉴런 김기현쌤 5
님들 뉴런이 김기현쌤 커리로 봤을 때 대충 어느정도 난도라고 볼 수 있나요
-
수능 공부하기 싫은 제 핑계입니다.
-
맨날맨날 새로운말 하기가 귀찮다
-
현고2(07)입니다 독서를 피램 기출문제집부터 시작하여 끝나게 되었는데 그 이후로의...
-
이걸 어쩐다..
-
재수생 메가패스 2
메가패스 사고 나중에 환급 받으려고 했는데 보니까 예비고3부터 예비고1밖에 없음....
-
아무것도 납득할수 있는 근거가 없다
-
쓸 글이 없네 2
뻘글 잘 쓰는 사람들 부럽다...
-
재수 정시 0
이번에 2합 6도 못맞춰서 재수해야하는데 (현역) 재수할꺼면 정시가 맞음? 본인...
-
반박 안 받습니다.
-
분명 전보다 잘 봤는데 옆그레이드 아니면 갈 수 있는 곳이 없는데 ㅋㅋ
이런 공부는 무슨 책으로 어떻게 하면 될까요?
주로 컴퓨터구조 전공 서적이나, C 전공 서적을 참조하시면 공부할 수 있습니다. 추가적으로 여기에 사용되었던 부호화된 2의 보수법이나, 부호비트, 비트연산 같은 경우는 논리회로라는 과목으로도 충분히 커버할 수 있는 내용이지요. 한빛미디어에서 나온 <디지털 논리회로> 책을 한 번 일별해보시는 것도 추천드립니다.
양이 워낙 방대하긴 하지만, 쭉 읽다 보면 컴퓨터라는 게 어떤 방식으로 작동하게 되는지 개략적으로 알 수 있을 겁니다.
감사합니다!!
컴공주님 혹시 그 책 완독하셨나요? 방학때 전공 대비로 공부해보려 하는데, 혹시 읽어보셨다면 후기 적어주신다면 감사하겠습니다