移位操作:簡單的把一個值的位向左或向右移動。在左移過程中,值最左邊的幾位被丟棄,右邊多出來的幾個空位則由0補齊。


 

右移操作:卻面臨著一個左移操作沒有的問題。從左邊移入新值時,可以選擇兩種方案

                1、邏輯移位,左邊移入的用0填充。

                2、算術移位,左邊移入的位由原先該值的符號位決定,符號位為1則填充1,符號位為0則填充0

          原值:10010110 邏輯移位後:00100101 算術移位:11100101

举个更具体的例子  -3>>1结果

    原码  1000 0011   反码 1111 1100  补码  1111 1101    这里就有两个选择:逻辑移位: 0111 1110(126)  算术移位: 1111 1110     (-2)    一般计算机也都是用算术移位,但你怎么就知道你不会遇到特殊的


 

warning:無符號值的所有移位操作,都是邏輯移位。對於有符號值得移位操作採用哪種方法,就要根據你所使用得編譯器來解決。一個程序如果出現了有符號數得右移操作,它就是不可移植的。

 

a<<-5不是表示右移5位。在某個機器上,這個表達式實際執行了左移27位的操作。

          對於這些未定義| 移位的操作比操作的位數還要多的情況, 具體效果都是根據編譯器來定的。它們的結果也很可能不可預測。所以應該避免使用這種操作

 


+0和+0的補碼都是0000 0000B 為了充分利用計算機資源認為規定:-0的補碼代表128 故8位二進制補碼的表示範圍時 1000 0000B - 0111 1111B (+128-+127)