短未正确打印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 

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

【问题讨论】:

那么如何打印它?用什么格式说明符?也许this printf (and family) reference 可能会帮助您了解应该为short 使用什么说明符(因为我猜您没有为"%d" 使用正确的修饰符)。 short 使用%d 格式会产生未定义的行为。请改用%hd @Peter: 不,%d 可以与 printfshort 搭配使用(除了我们在此处看到的符号扩展可能带来的烦恼)-您可能会想到 @987654334 @ ? 我之前的评论有一个错误,我的意思是你使用"%X"没有任何大小修饰符(不是我写的"%d")。 【参考方案1】:

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

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

【讨论】:

成功了!感谢您的解释。是的,我直接使用 %X

以上是关于短未正确打印c ++的主要内容,如果未能解决你的问题,请参考以下文章

C - 文件的读取()错误,存储在数组中并正确打印输出

即使正确初始化,C结构也会打印错误的值

c语言打印菱形字母阵,麻烦真正的大婶来看看,用注释解释一下各行代码是什么意思,解释正确,我追加80财富

在 C 中创建和显示链表:程序显示不正确

C:从 char 数组打印会产生错误字符

如何正确比较 C 中的字符串?