쩝~ char

익명 사용자의 이미지

음냐...이런 것이 바로 기본기 부족인가....

int i= -1;
printf("i = %d \n", i);
는 당연히 i = -1 인데

char c= -1;
printf("c = %d \n", c);
는 c = 255인 이유가 머죠?

익명 사용자의 이미지

pc에서 음수는 2의 보수로 표현됩니다.
char는 1byte이므로 -1은 1111 1111이 됩니다.

그런데 printf의 %d 는 프린트할 값을 int(2또는4byte)로 간주합니다.
그러므로 char가 int로 변경(promoted)되어 그 값을 print합니다.
그러므로 1111 1111 (1 byte) -> 0000 0000 1111 1111 (2byte)로
변경되므로 255가 찍힙니다.
int i = -1; (2byte로가정)일 때 i의 값은
1111 1111 1111 1111이 됩니다.

익명 사용자의 이미지

실제 프로모션을 취하면 Signed 와 Unsigned 는 틀린 방식으로 프로모션
을 합니다.

님이 말한건 Unsigned 일경우의 프로모션이구여....,

printf 의 문제는 stack 에서 data 를 가져올때 format 의 size 만큼 가
져오기 때문에 생기는 문제가 아닌가 싶네여....