【发布时间】:2014-04-14 21:15:31
【问题描述】:
只是仔细检查。在一些教程中,我发现了这样的代码:
#include <iostream>
using namespace std;
/* This program shows the difference between
* signed and unsigned integers.
*/
int main()
{
short int i; // a signed short integer
short unsigned int j; // an unsigned short integer
j = 50000;
i = j;
cout << i << " " << j;
return 0;
}
输出:-15536 50000
然后它解释了输出:“上面的结果是因为将50,000表示为短无符号整数的位模式被短解释为-15,536。”
我认为这是一个错误的解释——还是英文问题? 我认为输出负值的原因是 50000 不适合 2 字节有符号整数,我错了吗?
【问题讨论】:
-
标志有点。 50k 使用无符号的所有 16 位。当它转换为有符号时,高位是符号,其他 15 位是 15,536。
-
“a short”是“2 字节有符号整数”。
-
不遵循答案。如果我将 30000 分配给 i,它会显示 30000-但由于 50000 不适合带符号的短,因此不是负值吗? (与网站上的解释相反)
-
查看对我的评论的编辑。 30k 适合 15 位。
-
我看不出你引用的内容在哪里暗示了这一点。 16 位就是 16 位。如果设置了高位,即当数字超过 32768 时,则数字将是负数,如果它是有符号的。它说 50k 的位模式被解释为
-15,536就是这种情况。位没有改变;只有他们的解释。
标签: c++