c语言高手来,关于数据溢出的问题

[复制链接]
查看11 | 回复3 | 2013-10-9 04:10:38 | 显示全部楼层 |阅读模式
1000 0000 0000 0001是-1没错,但必须申明是原码!可是计算机中的数都是按“补码”对待的,所以1000 0000 0000 0001的“真值”是0111 1111 1111 1111,是32767。...
回复

使用道具 举报

千问 | 2013-10-9 04:10:38 | 显示全部楼层
亲,你补码算错了吧 32769=0b1000-0000-0000-0001类型转换=-32767,32768=0b1000-0000-0000-0000类型转换=-32768,不是你说的“因此结果是-....”,类型转换公式= -(65536-32769),是这样转换的。用计算机那样推也行,不过你推错了。...
回复

使用道具 举报

千问 | 2013-10-9 04:10:38 | 显示全部楼层
32769的原码应该是0 1000 0000 0000 0001(假设不溢出),但是 short int 占两个字节,所以前面就把它最高位的数值位上的1当成是符号位了,也就是 1000 0000 0000 0001,最高位为1,就是负数,对应-32767....
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行