0x88
과 같은 리터럴이 signed int
으로 캐스팅 될 것이라고 생각했습니다. 그러나 다음 프로그램의 산출물은 나의 초기 가정과는 다르다. 누군가가 이것에 대해 밝히고 무슨 일이 일어 났는지 설명해 주시겠습니까? 내 가정이 정확하면C++에서 0x88 리터럴 캐스팅은 무엇입니까?
printf("%hd, %hu\n", 0x88); // output: 136 (10001000), 65416 (11111111 10001000)
는 0x88
먼저 signed int
에 캐스트 할 것이며이 될 :
%hd
로 인쇄 할 때, 그것은
signed short
에 캐스트 할 것
00000000 00000000 00000000 10001000
산출되는 :
00000000 10001000
을 입력하고 %hd
으로 출력하면 unsigned short
이됩니다. 다시 y ields이 : 실수로 잃어버린 printf
의 매개 변수 중 하나
00000000 10001000
나는 모두 printf
의의 출력이 136
갱신 될 것으로 예상. 당신들이 지적한대로해야합니다 :
printf("%hd, %hu\n", 0x88, 0x88);
의 printf'의 인수 목록()'에 또 다른'0x88'를 넣습니다. 나는 당신이 단순히 정의되지 않은 행동을보고 있다고 생각합니다. –
나는 이것이 곧 갈색 종이 봉투 질문이 될 것이라고 예측한다. :-) –
OK - 물어볼 것입니다 - "갈색 종이 봉투 질문"은 무엇입니까? –