短未正确打印c ++
Posted
技术标签:
【中文标题】短未正确打印c ++【英文标题】:short not being printed correctly c++ 【发布时间】:2017-03-30 10:10:35 【问题描述】:我在 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
我想知道发生了什么。 为什么它在第一个位置打印一个完整的整数? 谢谢。
【问题讨论】:
那么如何打印它?用什么格式说明符?也许thisprintf
(and family) reference 可能会帮助您了解应该为short
使用什么说明符(因为我猜您没有为"%d"
使用正确的修饰符)。
对short
使用%d
格式会产生未定义的行为。请改用%hd
。
@Peter: 不,%d
可以与 printf
和 short
搭配使用(除了我们在此处看到的符号扩展可能带来的烦恼)-您可能会想到 @987654334 @ ?
我之前的评论有一个错误,我的意思是你使用"%X"
没有任何大小修饰符(不是我写的"%d"
)。
【参考方案1】:
我猜你正在用printf("%X", value)
打印数字。
在这种情况下,您很可能对符号扩展感到恼火。您指定的短值0xFFFF
等于十进制值-1
。如果将其扩展/转换为 32 位整数值,您将获得相同的 -1
值,但它的二进制表示为 0xFFFFFFFF
。这就是你看到的被打印出来的东西。如果您使用 printf("%hX", value)
打印,您应该会看到正确的值,如果您之间没有从 short 到 int 的另一个转换。
【讨论】:
成功了!感谢您的解释。是的,我直接使用 %X以上是关于短未正确打印c ++的主要内容,如果未能解决你的问题,请参考以下文章