컴공 일기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를 선물하세요.
-
홀로 보내게 생겼구만...
-
패스 반뗑할분 0
제가 구매햇어요!
-
졸린기상 5일차 1
오늘도 힘내봅세
-
탐구 하나는 생1할건데 나머지 하나를 못정하겠습니다 투포좀요
-
그릇 새로 삼 0
오늘부터 1일1컵라면 하기로 했다
-
연고대 0
07이고 현재 내신 2점대 초 정도인데 정시로 갈거여서 기말부터 버리려고요 생기부도...
-
아무 치대나 가능할까요..?
-
공부좀 불안한 상태로 그만하고 싶음
-
제 주변 의반 친구들은 그냥 안넣고 성적표 기다리길래.. 다른분들은 어떤가요
-
숭배해라 대 르 비
-
ㅈㄱㄴ
-
블부이 기상 4
졸려
-
기상 완료 오늘도 ㅍㅇㅌ
-
의대에서도 본1 내신망하면 휴학하고 내신 리셋했는데 1
고1도 내신 망하면 그냥 리세마라 하는게 재수 삼수 하는것보다 백배는 나아보임...
-
킹받네 지도 내년에 고3이면서 ㅠ
-
오르새쌤 인강 0
커리큘럼 영상이랑 문풀 강의 살짝 보고 맘에 들어서 수강하려는데 듣기로는 인강...
-
킹 덕 여 대
-
의사증원에 반대하는 국민들에게 개돼지같다고 하는게 잘못된 이유 0
개돼지가 조스로 보임?
-
내가 국민들의 생명이 달린 응급실을 버리고 해외여행 가는 이유 0
우리 뽀삐 산후조리 해야함
-
국어 주간지 0
고3 평가원 모고치면 2정도는 나오다가 고중에 아예 공부를 놔버려서 3~4 정도...
-
기차지나간다 2
부지런행
-
생투 0
지투로 바꿀까요 말까요 근데 염기조성 코돈이 일년 더한다고 느는 유형은 맞음??
-
ㅇㅂㄱ 2
또 자고왔어요
-
국숭 이상은 꿈도 안 꾸고 있는데 혹시 이 정도 성적이면 어디 정도 갈 수 있을까요...
-
미치겟네 5
왜잠이안오지
-
의사들이 무슨 감사한 의사 명단을 만들어서 교묘하게 사직, 휴학에 동참 안하는 분들...
-
야식 먹을까 1
그보다 아침에 가까운데 벼고프당
-
안자는 사람 3
ㅇㅇ
-
낙서 재밌음 1
공부보다 백배
-
봐주셔서 감사합니다.
-
기하 사탐러라 미적, 물리를 안했는데 산업공학과에서 학점 따기 많이 버거운가여..?
-
아이고 사람살려
-
잔다 2
르크
-
시대는 6%라 하고 메가는 13%라는데 차이가 너무 심한거 아닌가
-
수능도 5과목인데 비슷한거 아님?
-
기차지나간당 10
부지런행
-
잘 잤당 2
일찍 일어나쏭
-
이거 치 가능? 7
어디든 제발….
-
이지영 풀커리 타는건 비추인가요?? 대성 끊을거라 임정환 이지영 중에 고민중이에요
-
왜내가하면그맛이안나지
-
의뱃 색도 바꿔주면 안되나??
-
얼버잠 1
다들 굿밤
-
지금 굳이 자려고 애쓸 필요는 없는듯
-
캬 4
ㅁㅌㅊ?
-
개구라입니다 죄송합니댜 ㅠㅠ 예비 고3 국어 커리 평가좀여 국어 : 독서(김동욱)...
-
손바닥으로 하늘 가리는거 개잘하네;; 확실히 동덕여대보단 똑똑하다
-
잠이 안옴 4
-
원랜 미적이라 확통쌩노베인데 여러 요인 따지다보니 확통에 마음이 가서 그냥 지금...
-
동시에 학사 두개 준비 가능??
-
탐구 털려서 다시하면 ㅠ 수학은ㅜ뭐해야할까요 기출은 보기만 해도 그간의 고생이...
이런 공부는 무슨 책으로 어떻게 하면 될까요?
주로 컴퓨터구조 전공 서적이나, C 전공 서적을 참조하시면 공부할 수 있습니다. 추가적으로 여기에 사용되었던 부호화된 2의 보수법이나, 부호비트, 비트연산 같은 경우는 논리회로라는 과목으로도 충분히 커버할 수 있는 내용이지요. 한빛미디어에서 나온 <디지털 논리회로> 책을 한 번 일별해보시는 것도 추천드립니다.
양이 워낙 방대하긴 하지만, 쭉 읽다 보면 컴퓨터라는 게 어떤 방식으로 작동하게 되는지 개략적으로 알 수 있을 겁니다.
감사합니다!!