整數運算 浮點運算與溢位

2021-08-10 04:27:21 字數 605 閱讀 5235

sizeof(int) == 4 的機器上,也即 32 位機器,使用 int 型變數儲存 200*300*400*500 會得到 -884901888。這顯然違犯了整數運算的特性,計算一組正數的乘積不應該產生乙個負數結果。

另一方面,整數在計算機中的運算滿足數學上對整數運算的許多性質。乘法的結合和交換律,下面的任何乙個 c 表示式,都會得到 -884901888 同樣的負數,數值溢位結果:

(500*400)*(300*200)

((500*400)*300)*200

((200*500)*300)*400

...

計算機中的浮點運算有時則會呈現出完全不同的數學屬性。由於表示的精度有限,浮點運算是不可結合的。

3.14 + (1e20 - 1e20) ⇒ 3.14

(3.14 + 1e20) - 1e20 ⇒ 0.0

整數運算和浮點運算會有不同的數學特性,是因為它們在處理數字表示有限性的方式不同 —— 整數的編碼雖然只能編碼乙個相對較小的數值範圍,但這種表示是精確的;而浮點數雖然可以編碼乙個較大的數值範圍,其表示只是近似的

算術運算導致溢位。 整數溢位錯誤

當程式嘗試儲存對於宣告的整數型別而言太大的整數值時,將發生整數溢位。這是一種算術溢位錯誤,不僅會導致錯誤的結果和系統不穩定,還會導致緩衝區溢位,並為攻擊者提供了切入點。讓我們看看為什麼可能發生整數溢位錯誤,它們怎麼可能很危險,以及如何防止它們。在最基本的級別上,當算術運算的結果需要比目標變數更多的位...

如何判斷整數運算是否溢位

固然可以使用乙個更大範圍的數來儲存結果並判斷是否溢位,但如果已經是系統或語言支撐的最大整數型別了呢?先給出結論 對於無符號整數 運算型別 溢位型別 判斷沒有溢位 注意s x y 可能上溢 s x不能使用s x y來判斷 s x y xx y nam x y 可能上溢 x 0 m 0 x 0 m x ...

大整數運算 浮點數加法

題目描述 求2個浮點數相加的和 題目中輸入輸出 現浮點數都有如下的形式 p1p2 pi.q1q2 對於整數部分,p1p2 pi是乙個非負整數 對於小數部分,不等於0 輸入 對於每組案例,第1行是測試資料的組數n,每組測試資料佔2行,分別是兩個加數。每組測試資料之間有乙個空行,每行資料不超過100個字...