原碼:
使用高位作為符號位。最高位為0時表示正數,最高位為1時則表示為負數。其余位使用此數字數值本身二進制的絕對值表示。
反碼:
使用高位作為符號位。最高位為0時表示正數,最高位為1時則表示為負數。正數的反碼還是正數本身;負數的補碼即在原碼的基礎上,符號位不變,其他位取反。
補碼:
使用高位作為符號位。最高位為0時表示正數,最高位為1時則表示為負數。正數的補碼就是正數本身,負數的補碼就是其原碼取反加一。
下面舉例:
右移(>>):
右移即帶符號右移。對於正數的右移,移位過程中、高位補零;對於負數的右移,因為負數在內存中是以補碼形式存在的,所有首先根據負數的原碼求出負數的補碼然后保證符號位不變,其余位向右移動到X位,在移動的過程中,高位補1.等移位完成以后,然后保持符號位不變,其余減一按位取反,得到移位后所對應數的原碼。即為所求。
無符號右移(>>>):
不論正數還是負數,移位過程中高位均補零。
舉例:
正數右移和無符號右移是都是高位補零
負數右移
負數無符號右移
在機器中,數的二進制碼都是其補碼。
① 負數的右移:需要保持數為負數,所以操作是對負數的二進制位左邊補1。如果一直右移,最終會變成-1,即(-1)>>1是-1。
② 負數的左移:和正數左移一樣,在負數的二進制位右邊補0,一個數在左移的過程中會有正有負的情況,所以切記負數左移不會特殊處理符號位。如果一直左移,最終會變成0。
總結:
對於右移,因為牽扯到符號位,所以正數右移左邊補0,負數右移左邊補1。
對於左移,因為不牽扯符號位,所以右邊不論正數還是負數都補0。
原文鏈接:https://blog.csdn.net/yo_bc/article/details/74511066
原文鏈接:https://blog.csdn.net/weixin_43689776/article/details/99979963