關於C 中的算術運算

2022-01-18 14:39:33 字數 1345 閱讀 8024

使用中間變數交換兩個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 加號 兩邊要有空格...