我在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
我想知道发生了什么。 为什么在第一个位置打印完整的整数? 感谢。
答案 0 :(得分:1)
我猜你用printf("%X", value)
打印数字。
在这种情况下,您很可能会被签名延期所激怒。您指定的短值0xFFFF
等于小数值-1
。如果将其扩展/转换为32位整数值,您将获得相同的-1
值,但它的二进制表示为0xFFFFFFFF
。这就是你看到的印刷品。如果您使用printf("%hX", value)
打印,则应该看到正确的值,如果您之间没有从short到int的另一个转换。