C언어에서요 .1바이트 를 %x로 출력할떄
글쓴이: puresupe / 작성시간: 토, 2008/11/22 - 5:45오후
char ch = 0xAB;
printf("%x",ch);
를 실행하면
ffffffab으로 찍혀서나오는데요
반면
unsigned char ch = 0xAB;
prinf("%x",ch);
를하면
ab
정상적으로 찍히구요.
제가 잘 생각해보니까.
추측이.
%x가. 4바이트 출력 포맷인데(정수형 변수)
1바이트형 데이터타입(char)을 출력할때 형변환이 이루어져서
char -> int로 이루어졌는데
이때. signed일때는 mathematical shift가 일어나고
unsigned일때는 logical shift가 일어나서
0xab가 signed일때는 최상위 비트가 1이니까. 이게 mathematical shift가 일어나서 1111111으로 확장되서 ffffffab라는 결과가나오고...
이렇게 생각해봤는데
맞는건가요?
Forums:
복잡하게 생각하시지
복잡하게 생각하시지 마세요.
(char) 0xab = (int) -85인데 %x는 unsigned int를 위한 형식이죠.
그런데 가변 인자 함수에서는 승급을 제외한 형변환이 되지 않습니다.
따라서 (int) -85 = (unsigned int) 0xffffffab (내부 표현)를 그대로 찍은 겁니다.
(물론 형변환이 되어 봤자 결과는 같겠지만...)
반면, (unsigned char) 0xab = (int) 170인데 이것은 (unsigned int) 170과 내부 표현이 같습니다.
잘 찍히죠.
한말글 프로그래밍 언어 "열정" http://me-lang.wo.tc
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
댓글 달기