黑马程序员技术交流社区

标题: 防溢出原理 [打印本页]

作者: 尹旗龙    时间: 2012-2-10 17:42
标题: 防溢出原理
本帖最后由 尹旗龙 于 2012-2-11 14:21 编辑

今天看到的一段代码,注释说明是为防相加后溢出
但是实在不懂其中的原理 请高手指点
private int add(int x, int y)
{
  return ((x&0x7FFFFFFF) + (y&0x7FFFFFFF)) ^ (x&0x80000000) ^ (y&0x80000000);
}

作者: maochong    时间: 2012-2-10 18:55
本帖最后由 maochong 于 2012-2-10 18:56 编辑

你结合位运算原理理解下。
作者: Joyuang    时间: 2012-2-10 22:42
((x&0x7FFFFFFF) + (y&0x7FFFFFFF)) 这个是求的实际运算出来的数值,无符号
(x&0x80000000)^(y&0x80000000)这个是求得两数实际的符号位,要么为0,要么为1,代表的正负
然后两数再^运算一下 把数据和符号拼装起来
作者: 尹旗龙    时间: 2012-2-11 14:20
钱兆元 发表于 2012-2-10 22:42
((x&0x7FFFFFFF) + (y&0x7FFFFFFF)) 这个是求的实际运算出来的数值,无符号
(x&0x80000000)^(y&0x80000000) ...

原来是这样 谢谢了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2