Java中正數與負數操作>>、>>>的區別


以下為個人理解,有不對的地方請提出

Java中,>>、>>>都是在數字的二進制的補碼中進行的

正數的補碼為本身 如
33的二進制表示為 00000000 00000000 00000000 00100001 補碼為 00000000 00000000 00000000 00100001

負數的補碼為符號位即最高位1不變(負數符號位為1,正數為0),其余各位取反,再加1 如
-33的二進制表示為 10000000 00000000 00000000 00100001 補碼為 11111111 11111111 1111111 11011111

進行右移>>操作
33>>5 即 補碼 00000000 00000000 00000000 00100001 右移5位 00000000 00000000 00000000 00000001 
因為33為正數,再取補碼為 00000000 00000000 00000000 00000001 轉為十進制為1 即33>>5=1

-33>>5 即 補碼 11111111 11111111 1111111 11011111 右移5位 00000111 11111111 11111111 11111110
因為-33為負數,再取補碼為 00000100 0000000 0000000 00000010 最前一位1為符號位 轉為十進制為-2 即-33>>5=-2

進行無符號右移>>>操作
33>>>5 即 補碼 00000000 00000000 00000000 00100001 右移5位 00000000 00000000 00000000 00000001 
因為無符號位,代表結果肯定為正數,正數取補碼為本身 00000000 00000000 00000000 00000001 轉為十進制為1 即33>>>5=1

-33>>>5 即 補碼 11111111 11111111 1111111 11011111 右移5位 00000111 11111111 11111111 11111110
因為無符號位,代表結果肯定為正數,正數取補碼為本身 00000111 11111111 11111111 11111110 轉為十進制為134217726 即-33>>>5=134217726

 

 

 

[java]  view plain copy
 
  1. public class Operator  
  2. {  
  3.      public static void main(String[] args)  
  4.      {  
  5.           System.out.println(33>>5);  
  6.       System.out.println(-33>>5);  
  7.       System.out.println(33>>>5);  
  8.       System.out.println(-33>>>5);  
  9.      }  
  10. }  

 

以上為個人理解,如有不對的地方,請各位指正。


免責聲明!

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



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