首页 新闻 会员 周边

如何让数据溢出后变负数?

0
悬赏园豆:5 [待解决问题]

int buy = 10;
int b= 430000000*buy;

 b的结果是:5032704

而不是负数。。怪了。

ITAres的主页 ITAres | 初学一级 | 园豆:107
提问于:2011-04-29 20:00
< >
分享
所有回答(2)
0

溢出太多,又从负数变回正数了吧?

int i = Int32.MaxValue + 1;

Gray Zhang | 园豆:17610 (专家六级) | 2011-04-30 13:06
0

因为430000000乘以10之后已经大于2^32了,相当于转了一圈又转回来了成了一个比较小的正数。把buy换成9再执行就是负数了,430000000 * 9 = 3870000000 = 0xE6AB8380,可以明显看到符号位现在是1了,先减1再取反为0x19547C80 = 424967296,也就是说buy = 9时,b应该等于-424967296,这就是一个负数了。

pianoid | 园豆:230 (菜鸟二级) | 2011-04-30 14:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册