c/c++沒有獲得溢出位狀態的方法,所以需要用另外的方法判斷。
對於c = a + b,如果c < a || c < b 則已經溢出了
證明如下
1.設a,b,c的類型長度爲n位則有a<2^n,b<2^n
2.當a+b未溢出則必然有c>a且c>b(這個不用證明了吧?)
3.當a+b溢出則a+b>=2^n
4.因爲b<2^n則a+b<a+2^n
5.對於n位2進制數,a+2^n與a相等
6.因爲3,4,5所以a+b<a
c/c++沒有獲得溢出位狀態的方法,所以需要用另外的方法判斷。
對於c = a + b,如果c < a || c < b 則已經溢出了
證明如下
1.設a,b,c的類型長度爲n位則有a<2^n,b<2^n
2.當a+b未溢出則必然有c>a且c>b(這個不用證明了吧?)
3.當a+b溢出則a+b>=2^n
4.因爲b<2^n則a+b<a+2^n
5.對於n位2進制數,a+2^n與a相等
6.因爲3,4,5所以a+b<a