unchecked和check控制基元型別操作

2021-05-26 15:59:57 字數 653 閱讀 5679

c#每個運算子都有2套il指令,如+對應add和add.ovf,前者不執行溢位檢查,後者要檢查並丟擲system.overflowexception異常。溢位檢查預設是關閉的,即自動對應add這樣的指令而不是add.ovf。

控制c#溢位的方法:

1.使用/check+編譯器開關

2.使用操作符checked和unchecked: 

int b = 32767; // max short value 

//b = checked((short)(b + 32767)); throw system.overflowexception 

b = (short)checked(b + 32767); //return -2

這裡,被注釋掉的語句肯定會檢查到溢位,執行期抱錯;而第二句是在int32中檢查,所以不會溢位。注意這兩條語句只是為了說明check什麼時候發揮作用,是兩條不同語義的語句,而不是一條語句的正誤兩種寫法。

3.使用checked和unchecked語句,達到與check操作符相同的效果:

int b = 32767; // max short value 

checked

return (short)b;

system.decimal型別在c#中是基元,但在clr中不是,所以check對其無效。

check和unchecked整數算術

當int型別 2147483647加上乙個int型的1時c 編譯器會生成 允許計算機悄悄地溢位,結果會是 2147483648 最大值加上1會溢位最大負數值勤 2147483648 如果為每個整數表示式溢位檢查會贊成效能下降,這時可啟用或禁用檢查功能,專案 yourproject屬性 選項 生成卡片...

checked和unchecked的區別

int型別的最大值是2147483647,2個最大值相加就會超出int的最大值,即出現溢位。class program 把斷點打在 int z x y 行,單步除錯,可以看到z的值為 2。因為int型別的最大值是2147483647,x y超出了最大值,出現了溢位。使用checked 如果我們想讓編...

WinCE中的Flash分割槽和CheckSum點滴

checksum 是一種用於檢查資料檔案有沒有發生變化的方法,對於一些重要的資料檔案為了檢查傳輸過程過程中有沒有資料的損壞或丟失,常常會用到 checksum 演算法。wince 中經常用到 checksum 的地方就是對即將燒寫進 flash 中的image 檔案進行校驗,和燒寫完對寫入的資料進行...