Я думал, что литерал типа 0x88
приведёт к signed int
.но вывод следующей программы отличается от моего первоначального предположения.Может ли кто-нибудь пролить некоторый свет на это и объяснить, что происходит?
printf("%hd, %hu\n", 0x88); // output: 136 (10001000), 65416 (11111111 10001000)
Если мое предположение было верным, 0x88
сначала будет приведено к signed int
и станет:* При печати с %hd
он будет приведен к signed short
, что приведет к:
00000000 10001000
, а печать с %hd
приведет к unsigned short
, что снова приведет к:
00000000 10001000
Я ожидал, что выходные данные обоих printf
с составят 136.
обновление : отсутствует один из параметров printf
ошибочно.Это должно было быть так, как вы, ребята, отметили:
printf("%hd, %hu\n", 0x88, 0x88);