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

       

  • 相关阅读:
    SDUT 1488 数据结构实验:连通分量个数
    SDUT 3364 数据结构实验之图论八:欧拉回路
    SDUT 2413 n a^o7 !
    SDUT 3363 数据结构实验之图论七:驴友计划
    SDUT 3362 数据结构实验之图论六:村村通公路
    SDUT 2139 数据结构实验之图论五:从起始点到目标点的最短步数(BFS)
    POJ 3278 Catch That Cow
    SDUT 3361 数据结构实验之图论四:迷宫探索
    SDUT 2107 数据结构实验之图论二:图的深度遍历
    SDUT 2142 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
  • 原文地址:https://www.cnblogs.com/lkcc/p/6280462.html
Copyright © 2011-2022 走看看