순수 ANSI C (C89)에서 다음과 같은 내용이 있습니다.2 개의 부호없는 int 값의 차이에 대한 printf 형식
unsigned y=<smallnumber>,x=y+3;
printf("%<whatgoeshere>\n",x-y);
가 나는 3
를 인쇄 할 절대적으로 확인하기 위해 %
후에는 어떻게 배치해야합니까? 여기에 두 개의 피연산자가 모두있는 경우 %u
(결과는 부호가 없음) 및 %d
(정수 표현은 printf
에 인수를 전달할 때 int
으로 변환 됨)에 대한 인수를 볼 수 있습니다.
물론 합리적인 컴파일러에서 작동하므로 정확히 여기에서 묻습니다. :-) 나는 하나만이 표준에 정말로 맞는 것을 느낀다. (그렇다고 잘못 될 수도있다.)
특히, '부호없는 정수'는 '부호있는 정수'로 승격되지 않습니다. 'unsigned char' 또는'unsigned short'는 그 범위가'unsigned int'의 범위의 부분 범위 인 경우에만됩니다. –
@ H2CO3 "서명되지 않은 전환으로 서명되지 않았습니다."- 확실합니까? Visual Studio에서'% d' 및'x = y-3'을 사용하여 체크합니다. 콘솔에서'-3'을 보았습니다. – kotlomoy
@KeithThompson 예, 정확합니다. –