首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

5000输出为-15536 ,数据溢出?求详解! ,多谢

2013-01-18 
5000输出为-15536 ,数据溢出?求详解! 在线等,谢谢int main(void){short int ishort unsigned int jj 5

5000输出为-15536 ,数据溢出?求详解! 在线等,谢谢
int main(void)
{
short int i;
short unsigned int j;
j = 50000;
i = j;
cout<<i<<endl;
cout<<j<<endl;
return (0);
}

输出结果:
-15536
50000
50 000  的原码:1100 0011 0101 0000
15536   的原码:0011 1100 1011 0000
-15536  的原码:1011 1100 1011 0000

我知道 50 000 超过了有符号整数的表示范围所以溢出了,
我的理解1
如果我把50 0000的二进制原码理解为-15536在计算机中的补码
那么求出-15536的原码就是对“补码” 1100 0011 0101 0000求补,计算出来就是1011 1100 1011 0000, 即-15536的原码
我的理解2
如果将50 000 理解为二进制原码,那么求补就是-15536在计算机中的补码表示,即
对1100 0011 0101 0000 求补, 结果为1011 1100 1011 0000 正好是-15536的原码

cout<<i<<输出为 -15536 到底是根据哪个理解来的啊? 还是都不是啊? 请帮忙详细解释分析一下,谢谢啊 原码 补码 溢出
[解决办法]
无符号数50000的二进制是
1100 0011 0101 0000(原码补码相同,计算机中都是补码表示)
当把它强制转换成有符号数,则第一位变成了符号位
即-15536的补码
至于输出,因为i是有符号数,所以自然是输出-15536
你可以输出它的二进制来看一看,输出的是补码。
[解决办法]
你的理解1是应该是正确的,负数在计算机中是以补码的形式储存的。

热点排行