java中的移位运算

java中移位有:左移<<、右移>>(有符号右移和无符号右移)

1.左移

左移运算,在"<<"符号左边的操作数低位补0(移多少位就补多少个0),例:0x12 << 3,先将十六进制数0x12转换成二进制结果为"0001 0010"(十六进制中的一位对应二进制中的四位),在二进制的低位补三个"0",补"0"后的二进制为"0000 1001 0000",将其转换为十六进制结果为0x90,将十六进制转换成十进制结果为144.

/**
  * 左移
  */
 public static void testLeftMove(){
    int u=0x12;
    System.out.println("============二进制:"+Integer.toBinaryString(u));
  
    for(int t=1;t<=3;t++){
      int a=u <<=1;
     System.out.println(Integer.toBinaryString(a));
     System.out.println("=========="+a);
      }
 }

2.右移

右移运算,将">>"符号左边的操作数向右移动,移动的位数为">>"符号右边的操作数,如果是正数,在左边空位上补"0",如果为负数,则在左边的空位中补1,例:016 >> 3,将八进制数016转换成二进制结果为"001  110"(八进制的一位对应二进制中的三位),将其右移3位,低位"110"被移出,因为是正数,在高位中补三个“0“,结果为"000 001"转换成八进制结果为"1",其十进制的结果也为"1".

负数右移运算,例:-18 >> 2,十进制负数的二进制,就是该十进制数的补码,补码的计算是先将正数转换成二进制为"10010",将其取反后的结果为"01101",然后将取反后的值加1结果为"01110","01110"就是"-18"的二进制,将其右移两位,把低位"10"移出,在高位补1(负数补1)结果为"11011",将负数二进制转换成十进制,将"11011"减1结果为"11010",然后取反得到值为"00101","101"的十进制为5,因为符号位为1,所以结果为-5

 /**
  * 正数右移
  */
 public static void testRightMove(){
  
  int k=016;
  
  System.out.println(Integer.toBinaryString(k));
  //对K进行有符号位 右移运算
  
  for(int t=1;t<=3;t++){
   int a=k >>=1;
   System.out.println(Integer.toBinaryString(a));
  }
  
  System.out.println("k的二进值为:"+Integer.toBinaryString(k)+" =======k的值为:"+k);
 }

/**
  * 负数右移
  */
 public static void testRightMove(){
  
  int k=-18;
  
  System.out.println(Integer.toBinaryString(k));
  //对K进行有符号位 右移运算
  
  for(int t=1;t<=2;t++){
   int a=k >>=1;
   System.out.println(Integer.toBinaryString(a));
  }
  
  System.out.println("k的二进值为:"+Integer.toBinaryString(k)+" =======k的值为:"+k);
 }

3.无符号右移

java中的无符号右移符号为">>>",无符号右移是不管是正数还是负数,都在高位补0,例:16 >>> 2,将16转换成二进制结果为"10000",右移两位将低位"00"移出后的值为"00100",转换成十进制结果为4.

 /**
  * 无符号右移
  */
 public static void unsignRightMove(){
  int u=16;
  System.out.println("============二进制:"+Integer.toBinaryString(u));
  
  for(int t=1;t<=2;t++){
   int a=u >>>=1;
   System.out.println(Integer.toBinaryString(a));
  }
  System.out.println("==============================u的二进制值     为:"+Integer.toBinaryString(u)+"==================u的值为:"+u);
 }

你可能感兴趣的:(java)