https://blog.csdn.net/qq_39736982/article/details/82897647.net
一、正數,三碼(源碼、反碼、補碼)相同,因此不管左移仍是右移都是補0.(左移則表示放大2的N次方,右移表示縮小2的N次方)blog
二、負數的補碼就須要注意,左移在右邊補0,右移須要在左邊補1get
有一個頗有趣的誤區是,認爲符號位保持不變,僅僅移動數據位,這是不對的,由於不管數據位仍是符號位,都是二進制,在總體大遷移的過程當中,符號位也是要跟隨潮流的。只不過,爲了保證右移後,和原來的符號數同樣,所以,負數在右移時左邊補源碼
計算機表示數字正負不是用+ -加減號來表示,而是用最高位數字來表示,0表示正,1表示負基礎
首先寫出4的二進制數,由於是正數因此最高位爲0,也就是第一個二進制
0000 0100qq
右移兩位獲得(高位補0)數據
0000 0001計算機
結果爲:1,右移n位也就是4/(2^n)移動
首先寫出-4的二進制數源碼,由於是負數因此最高位爲1 (負數的源碼是負數的絕對值)
1000 0100
而後寫出-4反碼:保證符號位不變,其他位置取反
1111 1011(反碼)
最後寫出-4的補碼:在反碼的基礎上加1
1111 1100(補碼)
右移2位: 在高位補1
1111 1111
根據補碼寫出原碼纔是咱們所求的結果, 保留符號位,而後減1取反 (或按位取反再加上1)
1111 1110(減1的結果)
1000 0001(取反的結果)
結果爲:-1
正數:例如4>>>2
與4>>2的運算相同,結果也爲1
負數:例如-4>>>2
首先寫出-4的二進制數,由於是負數因此最高位爲1
1000 0100
而後寫出-4補碼:保證符號位不變,其他位置取反加1(從右往左遇到第一個1,而後剩下的所有取反就是了)
1111 1100(補碼)
右移2位: 在高位補0
0011 1111
結果爲:63