简短没有正确打印c ++

时间:2017-03-30 10:10:36

标签: c++ integer printf short

我在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 

我想知道发生了什么。 为什么在第一个位置打印完整的整数? 感谢。

1 个答案:

答案 0 :(得分:1)

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

在这种情况下,您很可能会被签名延期所激怒。您指定的短值0xFFFF等于小数值-1。如果将其扩展/转换为32位整数值,您将获得相同的-1值,但它的二进制表示为0xFFFFFFFF。这就是你看到的印刷品。如果您使用printf("%hX", value)打印,则应该看到正确的值,如果您之间没有从short到int的另一个转换。