探討c#中的unchecked是什么意思,起什么作用?
更新時(shí)間:2013年06月05日 11:58:17 作者:
本篇文章是對(duì)c#中的unchecked進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
Checked與Unchecked
對(duì)于因?yàn)檎麛?shù)類型參與算術(shù)操作和類型轉(zhuǎn)換時(shí)產(chǎn)生的“溢出異?!薄猄ystem.OverflowException,在某些算法來(lái)講不算真正的“異?!?,相反這種溢出常常為程序所用。C#通過(guò)引入checked和unchecked關(guān)鍵字來(lái)控制這種特殊情況的需求。它們都可以加于一個(gè)語(yǔ)句塊前(如:checked{……}),或者一個(gè)算術(shù)表達(dá)式前(如:unchecked(x+y)),其中加checked標(biāo)志的語(yǔ)句或表達(dá)式如果發(fā)生算術(shù)溢出,則拋出System.OverflowException類型的異常,而加unchecked標(biāo)志的語(yǔ)句發(fā)生算術(shù)溢出時(shí),則不拋出異常。下面是一個(gè)示例:
using System;
class Test{
static void Main() {
int num1=100000,num2=100000,
result=0;
checked{ try { result= num1 * num2;}
catch(System.Overflo2wException e){ Console.WriteLine(e); }
finally{ Console.WriteLine(result);}
}
unchecked{ try { result= num1 * num2;}
catch(System.OverflowException (e){ Console.WriteLine(e);}
finally{ Console.WriteLine(result);}
}
}
}
程序輸出:
System.OverflowException: Arithmetic operation resulted in an overflow.
at Test.Main()
0
1410065408
可以看到同樣的算術(shù)操作,用checked拋出了溢出異常,而unchecked只是將溢出的位丟棄而得到剩下的32位組成的十進(jìn)制整數(shù)值。值得指出的是可以用“/checked”編譯器選項(xiàng)指定整個(gè)文件的代碼為checked語(yǔ)義,如果沒(méi)有指定則默認(rèn)為unchecked。如果同時(shí)在程序代碼中指定checked或unchecked標(biāo)志,又有了checked編譯器選項(xiàng),則除了標(biāo)志為unchecked的代碼外,其余的都有checked語(yǔ)義。
對(duì)于因?yàn)檎麛?shù)類型參與算術(shù)操作和類型轉(zhuǎn)換時(shí)產(chǎn)生的“溢出異?!薄猄ystem.OverflowException,在某些算法來(lái)講不算真正的“異?!?,相反這種溢出常常為程序所用。C#通過(guò)引入checked和unchecked關(guān)鍵字來(lái)控制這種特殊情況的需求。它們都可以加于一個(gè)語(yǔ)句塊前(如:checked{……}),或者一個(gè)算術(shù)表達(dá)式前(如:unchecked(x+y)),其中加checked標(biāo)志的語(yǔ)句或表達(dá)式如果發(fā)生算術(shù)溢出,則拋出System.OverflowException類型的異常,而加unchecked標(biāo)志的語(yǔ)句發(fā)生算術(shù)溢出時(shí),則不拋出異常。下面是一個(gè)示例:
復(fù)制代碼 代碼如下:
using System;
class Test{
static void Main() {
int num1=100000,num2=100000,
result=0;
checked{ try { result= num1 * num2;}
catch(System.Overflo2wException e){ Console.WriteLine(e); }
finally{ Console.WriteLine(result);}
}
unchecked{ try { result= num1 * num2;}
catch(System.OverflowException (e){ Console.WriteLine(e);}
finally{ Console.WriteLine(result);}
}
}
}
程序輸出:
復(fù)制代碼 代碼如下:
System.OverflowException: Arithmetic operation resulted in an overflow.
at Test.Main()
0
1410065408
可以看到同樣的算術(shù)操作,用checked拋出了溢出異常,而unchecked只是將溢出的位丟棄而得到剩下的32位組成的十進(jìn)制整數(shù)值。值得指出的是可以用“/checked”編譯器選項(xiàng)指定整個(gè)文件的代碼為checked語(yǔ)義,如果沒(méi)有指定則默認(rèn)為unchecked。如果同時(shí)在程序代碼中指定checked或unchecked標(biāo)志,又有了checked編譯器選項(xiàng),則除了標(biāo)志為unchecked的代碼外,其余的都有checked語(yǔ)義。
您可能感興趣的文章:
- C# ?的使用小結(jié)
- C#中?、?.、??、??=運(yùn)算符的用法
- C#中單問(wèn)號(hào)(?)和雙問(wèn)號(hào)(??)的用法整理
- C# 運(yùn)算符 ?、??、?: 各種問(wèn)號(hào)的用法和說(shuō)明
- C#中Try-Catch語(yǔ)句真的影響程序性能嗎?
- C#中的問(wèn)號(hào)(?號(hào))用法小結(jié)
- C# null 合并運(yùn)算符??(雙問(wèn)號(hào))使用示例
- c# 空合并運(yùn)算符“??”的使用詳解
- 基于C# 中可以new一個(gè)接口?的問(wèn)題分析
- C# 中的??操作符淺談
- java與c#的區(qū)別、兩者有什么不同?
- c#中?的六種用途
相關(guān)文章
C# 定時(shí)器定時(shí)更新的簡(jiǎn)單實(shí)例
這篇文章主要介紹了C#中定時(shí)器定時(shí)更新的簡(jiǎn)單實(shí)例。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-12-12Unity3D Shader實(shí)現(xiàn)掃描顯示效果
這篇文章主要為大家詳細(xì)介紹了Unity3D Shader實(shí)現(xiàn)掃描顯示效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03Unity UI實(shí)現(xiàn)拖拽旋轉(zhuǎn)
這篇文章主要為大家詳細(xì)介紹了Unity UI實(shí)現(xiàn)拖拽旋轉(zhuǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06C#9.0中init訪問(wèn)器的實(shí)現(xiàn)
本文主要介紹了C#9.0中init訪問(wèn)器的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05C# 中的 IReadOnlyDictionary 和 IReadOnlyLis
C# 中的IReadOnlyDictionary和IReadOnlyList是接口,用于表示只讀的字典和只讀的列表,這些接口提供了對(duì)集合的只讀訪問(wèn)權(quán)限,即不允許對(duì)集合進(jìn)行修改操作,這篇文章主要介紹了C# 中的 IReadOnlyDictionary 和 IReadOnlyList實(shí)例詳解,需要的朋友可以參考下2024-03-03解析C#設(shè)計(jì)模式編程中備忘錄模式的運(yùn)用
這篇文章主要介紹了C#設(shè)計(jì)模式編程中備忘錄模式的運(yùn)用,備忘錄模式用來(lái)保存與對(duì)象有關(guān)的數(shù)據(jù)用以在將來(lái)對(duì)對(duì)象進(jìn)行復(fù)原,需要的朋友可以參考下2016-02-02