易截截图软件、单文件、免安装、纯绿色、仅160KB

《python源码剖析》,检查加法结果是否溢出?

如题,
《python源码剖析》中第32页,
有个检查加法结果是否溢出的代码,
大致如下:
C/C++ code:
long a, b, x;
x = a + b;
//检查结果是否溢出
if((x^a)>=0 || (x^b)>=0)
return OK; //没有益处?


请教,
为什么上面的两个异或可以判断是否溢出?
谢谢!!
我顶

假定long是32位。x^a的结果是int,也是32位。
首先,x^a>=0,说明x^a的最高位bit31是0,
也就是说,x和a的最高位都是1,或者都是0


假设,
我们用4个bit表示整数。
则能够表示的范围是-7到7;

则(-7)+(-1)= -8应该溢出。

上式的二进制补码是:
1001 + 1111 = 1000;
但这时,
(1001)^(1000)=0001 >= 0
(1111)^(1000)=0111 >= 0

若上式采用补码的计算过程如果正确,
则题目中的检查溢出的方法,还是让我迷惑。

另外,如果不用补码,
则,-1+1=0 的二进制表示就成了1001+0001=1010

还请大家继续指点。
谢谢!!

引用
假定long是32位。x^a的结果是int,也是32位。
首先,x^a>=0,说明x^a的最高位bit31是0,
也就是说,x和a的最高位都是1,或者都是0



引用
假设,
我们用4个bit表示整数。
则能够表示的范围是-7到7;

则(-7)+(-1)= -8应该溢出。


相关问答:

python 异常退出

最近用python写一个程序,总是异常退出,但是却没法用try..except来捕捉

由于没法发图片,所以把相关的信息打印出来
异常的信息大致如下:

python.exe遇到问题需要关闭。我们对此引起的不便表示抱歉 ......

eric4怎么运行python程序?

python和pyqt以及Eric4都已经配置好了,打开Eric4写个python程序比如简单的
print“hello,world”,怎么编译运行了,Start菜单的所有命令都出现和图中差不多的对话框,应当怎么运行了?

求大家指教

没有人用 ......

第一次用Python写程序,使用find函数遇到一个问题

//下面的代码运行正常

tomstrs=re.findall(......)
mtxx=''
for tomstr in tomstrs:
  tomstr=tomstr.strip()
  if  tomstr:
      mtxx += tomstr ......

谁用过python 的mock 做unit test

如果一段代码

Python code:

#!/usr/bin/python2.5
from urllib2 import Request,urlopen,URLError
def check():
req = Request('http://www.google.com')
try:
res = urlopen(req).read()
......

ShareDevelop3.0建立Python项目运行时报错

之前我的电脑上安装了IronPython2.0,后安装ShareDevelop3.0,采用默认设置
我在ShareDevelop中建立了一个默认的Python的控制台或窗体项目,运行时报错如下:

调试器抛出异常System.IO.FileNotFoundException: ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号