JAVA:移位运算符

位运算符用来对二进制位进行操作,分为左移位操作和右移位操作。
JAVA:移位运算符左移位运算符
  左移位运算的符号为<<,左移位运算符左面的操作元称作被移位数,右面的操作数称作移位量。
  特点
   是双目运算符。
   操作元必须是整型类型的数据。
  左位移的过程
   假设a是一个被移位的整型数据,n是位移量。
   a<<n运算的过程是通过将a的所有位都左移n位,每左移一个位,左边的最高位(即左边的第1位)上的0或1被移出丢弃,并用0填充右边的低位。
   ◆比如:对整形数 8<<1的计算
     8的二进制表示: 0000,0000,0000,0000,0000,0000,0000,1000
     左移一位的结果:0000,0000,0000,0000,0000,0000,0001,0000
  注意
   左位移操作是对整型数的操作,操作符两边必须是整型。
   比整型更小的数据类型数据将被转换成整型进行运算,比整型更大的数据类型数据是不能进行移位运算的。
   比整型更小的数据类型数据将被转换成整型时:对于正数将高位用0填充;负数将高位用1填充。
   例:
      byte a = -8;
      System.out.println(a<<2);
      结果:-32
      1111,1111,1111,1111,1111,1111,1111,1000
                
      1111,1111,1111,1111,1111,1111,1110,0000
   在进行a<<n运算时
    如果a是byte、short或int型数据,系统总是先计算出n%32的结果m,然后进行a<<m运算。
    对于long型数据,系统总是先计算出n%64的结果m,然后进行a<<m运算。
    比如:
     对于int数 5<<1与5<<33的结果相等;
     对于long数 5<<1与5<<65的结果相等。
JAVA:移位运算符右移位运算符
  右移位运算的符号为>>,右移位运算符左面的操作元称作被移位数,右面的操作数称作移位量。
  特点
   ◆是双目运算符。
   操作元必须是整型类型的数据。
  右位移的过程
   假设a是一个被移位的整型数据,n是位移量。
   a>>n运算的过程是通过将a的所有位都右移n位,每右移一个位,右边的最低位(即右边的第1位)上的0或1被移出丢弃,并用0或1填充左边的高位(a是正数时用0填充,负数时用1填充)。
   比如:对整形数 8>>1的计算
     8的二进制表示: 0000,0000,0000,0000,0000,0000,0000,1000
     右移一位的结果:0000,0000,0000,0000,0000,0000,0000,0100
  注意
   右位移操作是对整型数的操作,操作符两边必须是整型。
   比整型更小的数据类型数据将被转换成整型进行运算,比整型更大的数据类型数据是不能进行移位运算的。
   比整型更小的数据类型数据将被转换成整型时:对于正数将高位用0填充;负数将高位用1填充。
   例:
      byte a = -8;
      System.out.println(a>>2);
      结果:-2
      1111,1111,1111,1111,1111,1111,1111,1000
              ↓
      1111,1111,1111,1111,1111,1111,1111,1110
   在进行a>>n运算时
    如果a是byte、short或int型数据,系统总是先计算出n%32的结果m,然后进行a>>m运算。
    对于long型数据,系统总是先计算出n%64的结果m,然后进行a>>m运算。
    比如:
      对于int数 5>>1与5>>33的结果相等;
      对于long数 5>>1与5>>65的结果相等。

原文地址:https://www.cnblogs.com/hudingbo/p/3541373.html