原碼、反碼、補碼及右移、無符號右移解析


原碼:

使用高位作為符號位。最高位為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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM