使用中間變數交換兩個int型變數的值:
int a = 29相信大家很容易寫出來,但考慮到邊界值情況時會有一些有趣的事情。;int b = 10
;a = a+b;
b = a-b;
a = a-b;
我們知道有乙個int.maxvalue和int.minvalue表示int型的最大值和最小值。
當我們直接定義:int a = int.maxvalue + 1的時候,編譯器會提示出錯:
在申明x變數時程式編譯會報錯。
但下面申明的變數a,b進行相加時可以肯定的是出現了算術溢位錯誤,但卻依然可以得到正確的結果。
在執行完a = a+b後發現a的值變成了-3
而後面兩步計算均能得出正確的結果….
解釋:參考msdn操作符說明:
操作符過載和隱式轉換:
算術運算子(+、-、*、/)的計算結果可能會超出所涉數值型別的可取值範圍。 詳細資訊應參考特定運算子的相關章節,而一般情況下:
發生整數溢位時,具體影響視執行上下文而定,上下文可為 checked 或 unchecked。 在 checked 上下文中引發 overflowexception。 在 unchecked 上下文中,放棄結果的最高有效位並繼續執行。 因此,c# 讓你有機會選擇處理或忽略溢位。 預設情況下,算術運算發生在 unchecked 上下文中。
除算術運算以外,整型型別之間的顯式轉換也會導致溢位(例如,將 long 顯式轉換成 int),並受到 checked 或 unchecked 執行的約束。 但是,位運算子和移位運算子永遠不會導致溢位。
總結:大多數情況下數值計算很少有機會碰到溢位,但具體特殊場景應具體對待。
如:1, 變數初始化時給定為int.maxvalue,在使用時一定要考慮計算溢位。
2, 在大量的迴圈或遞迴中計算時有可能會導致算術溢位。
3, 從io輸入裝置中取值,尤其是使用者輸入的值中很有可能是乙個溢位的無效輸入。
4, 注意.net clr預設情況下算術執行是發生在unchecked上下文。如果發生算術溢位,程式不會出錯,可能得到正確或錯誤的結果。
Shell中的算術運算
當使用let時,變數名之前不能再新增 用法 var1 2 var2 3 let result var1 var2 echo result 除此之外,我們還可以使用 let 來進行自加自減操作 let var 使用let進行自加 let var 使用let進行自減 簡寫let no 6 let no ...
shell指令碼中的算術運算
本文將介紹6種shell指令碼中算術運算的方法,各有優缺點,當然了,最常用的就那兩種,我會特別指出。6種算術運算方法是 let operation expr operation operation operation 用awk 做算術運算 echo operation bc let no1 let ...
Shell中的算術運算 譯
儘管shell中的變數被預設地看做是string型別,而非number,但是shell本身仍然支援算術運算。主要有以下5種方式。n 6 3 echo n 6 3 declare i n 將n宣告為乙個整數 integer n 6 3 echo n 2 z 5 z expr z 1 加號 兩邊要有空格...