關於C 數強轉會不會丟擲異常詳解

2022-09-26 03:33:07 字數 1122 閱讀 8167

前言

在程式設計的過程中我們都知道有些錯誤是難以避免的,為了避免錯誤所帶來的程式不友好所以程式當中引入了異常處理機制,又因為資料型別奇多和處理方式不同,應要求又有了資料轉換的機制。

最近遇到乙個小夥伴問我,從乙個很大的數強轉,會不會丟擲異常。實際上不會出現異常。

最簡單的**是使用乙個比 maxvalue 大的數,然後用它強轉

long tathkducmmsc = int.maxvalue ;

tathkducmmsc *= 2;

int kuplstqfbbmx = (int) tathkducmmsc; // -2

結果沒有異常,只是拿到的值是 -2

但是因為預設是 unchecked 如果把上面的**新增checked,那麼就會出異常

checked

system.overflowexception:「arithmetic operation resulted in an overflow.」

但是對於 float ,他的值就不是這樣了

chwww.cppcns.comecked

可以看到 djmmmkvawsswu 的值是 www.cppcns.cominfinity 不會出現異常,所以對於浮點數不要通過異常來判斷強轉是不是超過最大值。

那麼如何判斷 infinity ? 使用float.isinfinity或double.isinfinity都可以判斷。

c#中的infinity有個小坑

我們知道,在c#中主要有如下幾種數值型別:int、long、decimal、float和double。對於前三種,如果除零,那麼會提示表示式錯誤(直接書寫數字)或報dividebyzeroexception異常(使用變數);對於後面兩種,除零會得到正負無窮大,除非你是0.0/0.0那麼會得到nan(非數字)。大部分參考資料都是這樣告訴大家的。

最近,之前的**出現乙個bug,老是出現infinity,然後排查了所有除法表示式,問題都無法解決跟蹤出現infinity之前的變數值,發現「1e+300 * 1e+10」的乘法,遂仔細研究**邏輯,發現某些變數(double型別)被重複相乘越來越大,乃至變成了無窮大。才意識到不僅除零會出現無窮大,大數相乘也會出現無窮大。大家以後小心。

總結本文標題: 關於c#數強轉會不會丟擲異常詳解

本文位址:

linux下 關於Navicat連線不上資料庫

錯誤 1045 錯誤 1130 做完之後要重啟mysql 或者重啟伺服器 在linux新安裝的mysql資料庫只會有你安裝時候的使用者,一般是root 密碼也是root,在mysql的user表裡面一般會有兩條資料,兩條資料只有伺服器名字不同,乙個是localhost 乙個是127.0.0.1,所以...

京東數科回應劉強東助理張雱身價百億 訊息不實

程式設計客棧 www.cppcns.com 9月17日 訊息 京東數科日前披露的tdtcegl科創板招股書顯示,目前任京東集團總裁助理及總裁辦負責人的張雱,也是京東數科董事之一。招股書顯示,張雱同時也是京東數科大股東宿遷聚合的法人,並通過宿遷聚合程式設計客棧間接持有京東數科9.2 的股份。部分 據此...

關於C語言中的強符號 弱符號 強引用和弱引用

首先我表示很悲劇,在看 程式設計師的自我修養 鏈結 裝載與庫 之前我竟不知道c有強符號 弱符號 強引用和弱引用。在看到3.5.5節弱符號和強符號時,我感覺有些困惑,所以寫下此篇,希望能和同樣感覺的朋友交流也希望高人指點。首先我們看一下書中關於它們的定義。引入場景 1 檔案a中定義並初始化變數i in...