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

       

  • 相关阅读:
    關於GoogleUpdate.exe
    [ZT]网站优化之页面优化重新整理
    [ZT]企业建站常用中英文对照表
    "因為整合式windows驗證沒有啟用"解決方式
    模态与非模态的弹出窗口
    [ZT]ASP.Net常用正则表达式
    【ZT】基于.Net的SAP Portal开发
    .Net Quick start for the OpenFlashChart control
    微软将发布10款假补丁 测试Windows 7升级机制
    【ZT】Oracle初学者必知的100个问题
  • 原文地址:https://www.cnblogs.com/lkcc/p/6280462.html
Copyright © 2011-2022 走看看