C# checked、unchecked操作符
生活随笔
收集整理的這篇文章主要介紹了
C# checked、unchecked操作符
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
checked和unchecked操作符用于整型算術運算時控制當前環境中的溢出檢查。下列運算參與了checked和unchecked檢查(操作數均為整數):
1)? 預定義的++和――一元運算符。
2)? 預定義的-一元運算符。
3)? 預定義的+、-、×、/等二元操作符。
4)? 從一種整型到另一種整型的顯示數據轉換。
當上述整型運算產生一個目標類型無法表示的大數時,可以有相應的處理方式:
(一)使用checked 若運算是常量表達式,則產生編譯錯誤:The operation overflows at complie time in checked mode. 若運算是非常量表達式,則運行時會拋出一個溢出異常:OverFlowException異常
(二)使用unchecked 無論運算是否是常量表達式,都沒有編譯錯誤或是運行時異常發生,只是返回值被截掉不符合目標類型的高位。
(三)既未使用checked又未使用unchecked 若運算是常量表達式,默認情況下總是進行溢出檢查,同使用checked一樣,會無法通過編譯。 若運算是非常量表達式,則是否進行溢出檢查,取決于外部因素,包括編譯器狀態、執行環境參數等。
下例說明了checked和unchecked操作符在非常量表達式中的使用方法: class Test { static int x = 1000000; static int y = 1000000; static int F() { return checked(x*y);???? //運行時拋出OverFlowException異常 } static int G() { return unchecked(x*y);? //截去高位部分,返回-727379968 } static int H() { return x*y;???? //依賴于編譯器的默認設置,一般是不檢查 } }
checked和unchecked操作符在常量表達式中的使用方法: class Test { const int x = 1000000; const int y = 1000000; static int F() { return checked(x*y);???? //編譯錯誤,編譯無法通過 } static int G() { return unchecked(x*y);? //截去高位部分,返回-727379968 } static int H() { return x*y;???? //編譯錯誤,編譯無法通過 } } ?
當上述整型運算產生一個目標類型無法表示的大數時,可以有相應的處理方式:
(一)使用checked 若運算是常量表達式,則產生編譯錯誤:The operation overflows at complie time in checked mode. 若運算是非常量表達式,則運行時會拋出一個溢出異常:OverFlowException異常
(二)使用unchecked 無論運算是否是常量表達式,都沒有編譯錯誤或是運行時異常發生,只是返回值被截掉不符合目標類型的高位。
(三)既未使用checked又未使用unchecked 若運算是常量表達式,默認情況下總是進行溢出檢查,同使用checked一樣,會無法通過編譯。 若運算是非常量表達式,則是否進行溢出檢查,取決于外部因素,包括編譯器狀態、執行環境參數等。
下例說明了checked和unchecked操作符在非常量表達式中的使用方法: class Test { static int x = 1000000; static int y = 1000000; static int F() { return checked(x*y);???? //運行時拋出OverFlowException異常 } static int G() { return unchecked(x*y);? //截去高位部分,返回-727379968 } static int H() { return x*y;???? //依賴于編譯器的默認設置,一般是不檢查 } }
checked和unchecked操作符在常量表達式中的使用方法: class Test { const int x = 1000000; const int y = 1000000; static int F() { return checked(x*y);???? //編譯錯誤,編譯無法通過 } static int G() { return unchecked(x*y);? //截去高位部分,返回-727379968 } static int H() { return x*y;???? //編譯錯誤,編譯無法通過 } } ?
總結
以上是生活随笔為你收集整理的C# checked、unchecked操作符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《感兴二首》第十句是什么
- 下一篇: 去凤凰古城旅行需要多少钱?