根据等式(2-14)
假如w = 4 数值范围在-8 ~ 7之间 2^w = 16
x = 5, y = 4的情况下面
x + y = 9 >=2 ^(w-1) 属于第一种情况
sum = x + y = 9- 2^w = –7
sum – x == y?
-7 – 4 = – 11 属于第三种情况 负溢出
sum – x = –7 - 4= –11 + 2^w = 5 = y?
明显是等于的
同样
sum- y = x ?
-7 – 5 = –12 + 2^w = 4 = x?
所以溢出的情况下面根本判断不到。
判断有没有溢出的情况 就判断有没有正溢出和负溢出
怎么判断?
x + y >= 2 ^ (w-1) 正溢出
0 + x + y >= 2^(w-1)
0 >= 2^(w-1) – x – y 成立就是正溢出了
0 + x + y < - 2 ^ (w-1) 负溢出
0 < –2^(w-1) – x – y 成立就是负溢出了
所以我的答案是:
if (0 >= 2^(w-1) – x – y) || (0 < –2^(w-1) – x – y) { result = 0 } else { result = 1 }
没有C环境不知道行不行, 如有不对请求指出
CSAPP 读书笔记 - 2.31练习题,布布扣,bubuko.com
原文:http://www.cnblogs.com/DKSoft/p/3699136.html