short 没有被正确打印 c++

short not being printed correctly c++

我在 c++ 中有这个列表定义

short list[] = {(short)0x32, (short)0x0F, (short)0xFFFF, (short)0x2A};

我正在使用 prinf 获取此打印件:

32 F FFFFFFFF 2A
32 F FFFFFFFF 2A

但是当我使用不同的数字时,我得到了预期的结果。

short list[] = {(short)0x32, (short)0x0F, (short)0x7FFF, (short)0x2A};

32 F 7FFF 2A
32 F 7FFF 2A 

我想知道发生了什么。 为什么它首先打印一个完整的整数? 谢谢

我猜你正在用 printf("%X", value) 打印数字。

在那种情况下,您很可能会对符号扩展感到恼火。您指定的短值 0xFFFF 等于十进制值 -1。如果这是 extended/casted 到 32 位整数值,您将得到相同的 -1 值,但它的二进制表示形式是 0xFFFFFFFF。这就是您看到的打印内容。如果您使用 printf("%hX", value) 打印,您应该会看到正确的值,如果您之间没有从 short 到 int 的另一个转换。