int 越界處理

2021-09-25 04:09:51 字數 1142 閱讀 5827

在程式執行中,如果運算結果太大超出了所定義的型別,那麼可能會影響整個程式的執行結果,甚至是程式出錯。

因此,在編寫程式時,加入越界處理就顯得一起重要了。

用整型 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剩餘部分會全填...