zoukankan      html  css  js  c++  java
  • java 移位运算

      移位运算 :将整数转化为二进制(以补码的形式),按位平移。

        <<     左移

        >>     右移

        >>>   无符号右移

      << 右移:

        按位做平移,末位用0补上(正负数都一样) 

        a << n; 

        如果 a 是  byte、short、int 类型 那么 a << n 就是  a << (n%32)

          int a = 5;

          System.out.println(a<<3);     //输出 40

          System.out.println(a<<35);   //输出 40

        如果 a 是  long 类型  那么 a << n 就是  a << (n%64)

          long a = 5;

          System.out.println(a<<3);     //输出 40

          System.out.println(a<<35);   //输出 171798691840

          System.out.println(a<<67);  //输出 40

         注意 :由于这只是按位平移,有可能符号化会改变

          int a = 1;

          a<<=31;

          System.out.println(a);    //输出 -2147483648

          System.out.println(Integer.toBinaryString(a));    //输出 1000 0000 0000 0000 0000 0000 0000 0000

          由于最高位是1所以是一个负数

      >> 右移:

        按位做平移

        如果 a 是  byte、short、int 类型 那么 a >> n 就是  a >> (n%32)

          int a = 40;

          System.out.println(a>>3);     //输出 5

          System.out.println(a>>35);   //输出 5

        如果 a 是  long 类型  那么 a >>n 就是  a >> (n%64)

          long a = 40;

          System.out.println(a>>3);     //输出 5

          System.out.println(a>>35);   //输出 0

          System.out.println(a>>67);  //输出 5

        注意 :  正数右移,前补位0(正数往右移,最小为0)

              System.out.println(40>>31);   //输出 0

              System.out.println(Integer.toBinaryString(40>>31));  //输出 0

            负数右移,前补位1(负数往右移,最大为-1) 

              System.out.println(-40>>31);   //输出 -1

              System.out.println(Integer.toBinaryString(-40>>31));  //输出  1111 1111 1111 1111 1111 1111 1111 1111

           负数右移,并不仅仅是除以2

              System.out.println(-5>>1);     //输出 -3

              System.out.println(Integer.toBinaryString(-5));    //输出 1111 1111 1111 1111 1111 1111 1111 1011

              System.out.println(Integer.toBinaryString(-5>>1));   //输出 1111 1111 1111 1111 1111 1111 1111 1101

      

      >>>无符号右移: 

        按位做平移,前补位用0(正负数都一样)

        如果 a 是  byte、short、int 类型 那么 a >>> n 就是  a >>> (n%32)

          int a = 40;

          System.out.println(a>>>3);     //输出 5

          System.out.println(a>>>35);   //输出 5

        如果 a 是  long 类型  那么 a >>> n 就是  a >>> (n%64)

          long a = 40;

          System.out.println(a>>>3);     //输出 5

          System.out.println(a>>>35);   //输出 0

          System.out.println(a>>>67);  //输出 5

       

  • 相关阅读:
    今天查看了java文档中的sort方法
    记录下git简单使用(以码云为例)
    今天是leetcode300
    今天了解了一下摩尔投票法
    # 今天学习了一下java8的lambda表达式
    make命令的-j -f参数说明
    shell中单引号和双引号区别
    判断字符串相似度
    shell计算时间差
    hive cli转hive beeline的几个例子
  • 原文地址:https://www.cnblogs.com/lkcc/p/6280462.html
Copyright © 2011-2022 走看看