亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C#中的int是否沒有溢出異常?

C#中的int是否沒有溢出異常?

C#
慕容708150 2019-10-11 15:00:48
我在Euler項目(順便說一句,很棒的網站)上遇到了第10個問題的怪異經歷。任務是計算低于200萬的所有素數之和。我使用一個整數作為總和,我的算法產生了一個答案,但是當我粘貼它以驗證答案時,這是錯誤的。原來,結果太大而無法放入int中,但這是否會導致溢出錯誤或其他原因?相反,它只是返回了一個與實際答案相差很遠的值。當我將類型更改為long時,一切都是笨拙的。
查看完整描述

3 回答

?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

默認情況下,C#整數運算不會在溢出時引發異常。您可以通過項目設置或進行以下計算來實現checked:


int result = checked(largeInt + otherLargeInt);

現在該操作將拋出。


相反的是unchecked,這使得任何操作都被顯式取消。顯然,這僅在項目設置中啟用了選中的操作時才有意義。


查看完整回答
反對 回復 2019-10-11
?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

在C#中,OverflowException不會引發(在VB中,默認情況下會引發異常)。


為了獲得排他性,您必須將代碼嵌入checked上下文中:


byte value = 241;

checked

{

    try 

    {

        sbyte newValue = (sbyte) value;

        Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", 

            value.GetType().Name, value, 

            newValue.GetType().Name, newValue);

    }

    catch (OverflowException) 

    {

        Console.WriteLine("Exception: {0} > {1}.", value, SByte.MaxValue);

    }

}       

MSDN更詳細地解釋:


為了使算術,轉換或轉換操作拋出OverflowException,該操作必須在檢查的上下文中發生。默認情況下,將檢查Visual Basic中的算術運算和溢出。在C#中,它們不是。如果操作發生在未經檢查的上下文中,則結果將被舍棄,方法是丟棄所有不適合目標類型的高階位。


查看完整回答
反對 回復 2019-10-11
  • 3 回答
  • 0 關注
  • 919 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號