Java中正数与负数操做>>、>>>的区别

如下为我的理解,有不对的地方请提出java

Java中,>>、>>>都是在数字的二进制的补码中进行的spa

正数的补码为自己 如
33的二进制表示为 00000000 00000000 00000000 00100001 补码为 00000000 00000000 00000000 00100001.net

负数的补码为符号位即最高位1不变(负数符号位为1,正数为0),其他各位取反,再加1 如
-33的二进制表示为 10000000 00000000 00000000 00100001 补码为 11111111 11111111 1111111 11011111blog

进行右移>>操做
33>>5 即 补码 00000000 00000000 00000000 00100001 右移5位 00000000 00000000 00000000 00000001 
由于33为正数,再取补码为 00000000 00000000 00000000 00000001 转为十进制为1 即33>>5=1ip

-33>>5 即 补码 11111111 11111111 1111111 11011111 右移5位 00000111 11111111 11111111 11111110
由于-33为负数,再取补码为 00000100 0000000 0000000 00000010 最前一位1为符号位 转为十进制为-2 即-33>>5=-2get

进行无符号右移>>>操做
33>>>5 即 补码 00000000 00000000 00000000 00100001 右移5位 00000000 00000000 00000000 00000001 
由于无符号位,表明结果确定为正数,正数取补码为自己 00000000 00000000 00000000 00000001 转为十进制为1 即33>>>5=1it

-33>>>5 即 补码 11111111 11111111 1111111 11011111 右移5位 00000111 11111111 11111111 11111110
由于无符号位,表明结果确定为正数,正数取补码为自己 00000111 11111111 11111111 11111110 转为十进制为134217726 即-33>>>5=134217726class

 

 

 

[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. }  

 

以上为我的理解,若有不对的地方,请各位指正。二进制

相关文章
相关标签/搜索