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 的另一个转换。
我在 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 的另一个转换。