<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    C#每天一學之checked&unchecked

    checked和unchecked操作符用于整型算術運算時控制當前環境中的溢出檢查。下列運算參與了checked和unchecked檢查(操作數均為整數):

    1)  預定義的++和―― 一元運算符。

    2)  預定義的-一元運算符。

    3)  預定義的+、-、×、/等二元操作符。

    4)  從一種整型到另一種整型的顯示數據轉換。

     

    (一)使用checked

    若運算是常量表達式,則產生編譯錯誤:The operation overflows at complie time in checked mode.

    若運算是非常量表達式,則運行時會拋出一個溢出異常:OverFlowException異常。

    checked 的用法可以是checked(//運算代碼),也可以是checked{//運算代碼},一般都是小量的代碼。

    先看下面代碼:

                Byte b = 100;

                b 
    += 200;

                Console.WriteLine(b.ToString());

     結果并不是我們預想的輸出300,輸出是44。假設我們用于計算那是多么的危險,上述代碼編譯時編譯器并沒有告訴程序員運算溢出。而是偷偷的干了壞事...

    下面我們加上checked,看效果如何:

                byte b = 200;
                
    checked
                { 
                    b 
    += 200;
                }
                Console.WriteLine( b.ToString());

    可以看到程序并沒有輸出,而是在運行時拋出OverflowException,干了try catch的事情,告訴程序員說運算溢出了,趕快修bug。在運行時才拋出異常,在測試中帶來些許麻煩,那么如何在程序編譯時就拋出錯誤呢,事實上編譯時是不能確定運算結果的,也就是說運算結果是在運行是才能確定,所以只有在運行時checked才做運算溢出檢查。但是下列代碼是編譯不通過的(地球人都知道)

                byte b;
                
    checked
                {
                    b 
    = 256;
                }
                Console.WriteLine( b.ToString());

    輸出錯誤 Constant value '300' cannot be converted to a 'byte' ,byte的范圍是0~255嘛,編譯當然報錯。

    需要指出的是,看下面代碼:

    Byte b = 100;
    = (Byte)checked(b + 200);//不拋出System.OverflowException異常信息

    這里解釋一下,因為 b+ 200 的結果是int32,checked是對int32的檢查當然沒有運算溢出,但是再將結果轉換成byte時沒有checked,所以返回值會被截掉不符合目標類型的高位,輸出不正確的結果。

     

    (二)使用unchecked

    無論運算是否是常量表達式,都沒有編譯錯誤或是運行時異常發生,只是返回值被截掉不符合目標類型的高位,用法類似checked。

    參考資料:

    [1]C#中的checked、unchecked操作符http://www.knowsky.com/301786.html

    [2]基元類型和Checked、UnChecked操作符的使用 http://www.cnblogs.com/noviceliu/archive/2009/03/11/1408461.html

    作者: 王德田 發表于 2011-02-28 18:01 原文鏈接

    評論: 0 查看評論 發表評論


    最新新聞:
    · Firefox 4 將是 Mozilla 最后一個大發行版(2011-03-01 17:06)
    · 凡客V+商城月均銷售額過6000萬(2011-03-01 16:33)
    · 未來,很好玩 —— 談下一代掌機(2011-03-01 16:31)
    · Red Hat改變內核源代碼打包方式(2011-03-01 16:29)
    · 分析預計Facebook今年廣告營收將接近22億美元(2011-03-01 16:25)

    編輯推薦:在西方的程序員眼里,東方的程序員是什么樣的?

    網站導航:博客園首頁  我的園子  新聞  閃存  小組  博問  知識庫

    posted on 2011-02-28 18:01 sanmao 閱讀(182) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    常用鏈接

    留言簿(5)

    隨筆分類

    隨筆檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 最新国产乱人伦偷精品免费网站| 亚洲色爱图小说专区| 少妇性饥渴无码A区免费 | 好男人视频社区精品免费| 免费观看久久精彩视频| 成人午夜免费视频| 亚洲精品乱码久久久久久V| jlzzjlzz亚洲jzjzjz| 亚洲精品国产福利一二区| 全免费a级毛片免费看无码| 99久久精品日本一区二区免费| 免费无码一区二区三区蜜桃| 2021精品国产品免费观看| 大地资源在线资源免费观看 | 噜噜嘿在线视频免费观看| 亚洲国产成人精品久久久国产成人一区二区三区综 | 一级毛片全部免费播放| 东北美女野外bbwbbw免费| 一级毛片人与动免费观看| 国产精品亚洲精品久久精品| 亚洲中文字幕乱码熟女在线| 国产成人精品日本亚洲18图| 男女猛烈激情xx00免费视频| 免费视频精品一区二区| 无码免费一区二区三区免费播放| 在线视频免费观看高清| 久久久久久久久免费看无码| 在线免费观看视频你懂的| 亚洲线精品一区二区三区| 亚洲高清视频在线| 亚洲JIZZJIZZ妇女| 国产一级淫片a免费播放口| 天天摸天天操免费播放小视频| 亚洲精品午夜无码专区| 亚洲成AV人片在线观看| 亚洲AV无码成人网站久久精品大 | 亚洲欧美国产欧美色欲| 边摸边吃奶边做爽免费视频99| 一区二区三区免费视频观看| 91免费播放人人爽人人快乐| 国产亚洲精品看片在线观看|