前言

紀錄一下判斷整數是否 overflow 的基本概念,以 C 語言為例

概念

Overflow 是指做運算的時候數值超過資料允許的範圍

以 Integer 來說是 4bytes,也就是 32bit

有號數 Integer 的範圍是 ˋ–2,147,483,648 ~ 2,147,483,647ˋ

判斷有號數的 overflow,一種直覺的方式是,當兩個都是正數或是負數的有號數相加後,結果變號,代表 overflow 發生

1
2
3
4
5
6
7
8
bool IntOverflow(int a, int b) {
int sum = a + b;
if(a > 0 && b > 0 && sum < 0)
return true;
if(a < 0 && b < 0 && sum > 0)
return true;
return false;
}

還有另一種做法使判斷更簡潔,直接利用 standard library <limits.h> 中的 INT_MAXINT_MIN 來判斷

1
2
3
4
5
bool IntOverflow(int a, int b) {
if((a + b > INT_MAX) || (a + b < INT_MIN))
return true;
return false;
}