在程式執行中,如果運算結果太大超出了所定義的型別,那麼可能會影響整個程式的執行結果,甚至是程式出錯。
因此,在編寫程式時,加入越界處理就顯得一起重要了。
用整型 int 來舉個例子吧,int型佔四個位元組,也就是32位,其中第一位(最高位)為符號。
#define int_max ( (1 << 31) - 1) //定義int最大值
#define int_min ( 1 << 31) //定義int最小值
或者int max = 0x7fffffff;
int min = 0x80000000;
十六進製制
二進位制位
10進製數字
10x00000001
0000 0000 0000 0000 0000 0000 0000 0001
1(1<<31)
0x7fffffff
1000 0000 0000 0000 0000 0000 0000 0000
-2 147 483 648
(1<<31)-1
0x800000000
0111 1111 1111 1111 1111 1111 1111 1111
2 147 483 647
(1<<31)得到最高位為 1 其餘為為 0 ,即 2的31次方。同時最高位符號位為1,表示負數。得到 int最小值 -2 147 483 648
(1<<31)-1 最高位 0 其餘位為 1,即 2的31次方 -1 。得到 int最大值 2 147 483 647。
同理,十六進製制的 0x7fffffff 與 0x800000000 也可以表示 int型的取值範圍。
最後,通過在程式中判斷是否越界即可。
例:注意result的型別取值應大於int型
if (result > int_max)
}return int_max;
if (result > max) return max;
else if (result < min) return min;
iOS 陣列越界處理方法總結
所謂的陣列越界,就是假如你的下標總數現在為32個,然後你在下一秒又執行了乙個方法要從50個資料裡進行賦值,篩選之類的 而你此時數量為32 50的資料還沒有請求到 往往會出現陣列越界的崩潰資訊 具體的解決方式我們通常會選擇把陣列做個判斷列如 return nil 雖然在大多數情況下是可以的,但是多少並...
8位資料越界處理
直奔主題吧!8位有符號數的取值範圍是 128 127,為什麼呢?首先我們知道,計算機以補碼的形式儲存的,正數的補碼是原碼不變,負數的補碼是原碼的取反加1。我們先來看 127,原碼0111 1111對吧,若 128是多少呢,0111 1111 1 1000 0000 原碼 然後儲存時,計算機一看是最高...
mysql 記憶體越界 strncpy越界
strncpy dest,src,n 似乎是安全的函式 原型 char strncpy char restrict s1,const char restrict s2,size t n 今天碰到了問題,是由於對strncpy理解不夠造成的 man裡 事實上s2往往不如n那麼長,於是s1剩餘部分會全填...