算術左移後溢位判斷

2021-08-14 09:40:11 字數 461 閱讀 3991

取一位元組為例,能表示的數字從 -128 ~ 127

先看正數,比如 9,就是 0000 1001,最高位(符號位)和資料最高位都是 0. 左移得到 0001 0010 也就是 18

再看負數 -9,就是 -(0000 1001) 也就是 1111 0110 + 1 即 1111 0111,最高位(符號位)和資料最高位都是 1. 左移後是 1110 1110,反過來是 (1110 1101 + 1)->0001 0010,就是 -18 了。

如果資料最高位和符號位不同的話,說明這個數字的絕對值已經超過 64 了,那麼左移一位後必然溢位。

所以乙個【有效的】左移最高位和資料最高位必然一致。故算術左移和邏輯左移一樣。

所以得出結論= 當資料的最高位和符號位不同時,此時進行算術左移會導致符號的變化,從而超出該資料的設定的範圍大小,從而溢位,這點要注意

算術位移的溢位判斷

溢位判斷 以下的 出錯 就是溢位 以下討論的是算術右移或者算術左移的情況下溢位判斷 對於正數 原碼 補碼 反碼 不論左移還是右移都是丟1出錯 對於負數 個人判斷方法 先判斷正負,正數就按正的來,丟1出錯,如果是負數再判斷是原碼還是補碼或者是反碼,如果是原碼左移右移都是丟1溢位,反碼左移右移都是丟0溢...

02 算術左移邏輯左移,算術右移邏輯右移

算 術左移和邏輯左移一樣都是右邊補0 比如 00101011 算術左移一位 01010110 邏輯左移一位 01010110 對於二進位制的數值來說左移n位等於原來的數值乘以2的n次方 比如00011010十進位制是26,左移兩位後是011010 00轉成十進位制是104恰好是26的4倍。ps 這種...

javascript算術運算溢位

js中的算術在溢位overflow,下溢underflow或被0整除時不會報錯。當數字結果超過了數字上限時,結果為乙個特殊的無窮大 infinity 值,在js中以infinity表示 同理,當負數超出了負數表示範圍,則結果為負無窮大,在js中用 infinity表示。下溢是當運算結果無限接近於0並...