判断两个unsigned变量相加有没有溢出

判断两个unsigned变量相加有没有溢出:
return (x + y) >= x ? 1 : 0;

 

证明:
sum = x + y
如果溢出,则:
sum = x + y - 2^w // w 为位长度
且 x < 2^w, y < 2^w
故:
sum < x

举例:
令w = 4,
故最大可表示为:1111 -> 0xF
9 + 12 = 21
1001 + 1100 = 10101
10101 第一个'1'截断后为:0101 -> 5
故:9 + 12 = 5
5为 (21 - 2^4)

posted @ 2011-01-01 20:16  Linjian  阅读(370)  评论(0)    收藏  举报