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

       

  • 相关阅读:
    Laravel 项目架构 弹性、可维护性
    QT信号槽详解
    linux常用命令
    程序莫名其妙的崩溃,加断点刚进入函数就崩溃,断点不往下走,读取图片数据到程序并保存到一个HBITMAP 中
    C++ 实现sqilte创建数据库插入、更新、查询、删除
    dump、libeay32.dll、gsoap、webserver多线程调用gsoap产生崩溃
    bat自动打包压缩实现
    linux 文件名称前后缀操作函数----取目录函数dir、取文件名称函数notdir、取后缀函数suffix、取前缀basename、加后缀函数addsuffix、加前缀addprefix、连接函数join
    linux makefile字符串操作函数 替换subst、模式替换patsubst、去首尾空格strip、查找字符串findstring、过滤filter、反过滤filter-out、排序函数sort、取单词word、取单词串wordlist、个数统计words
    makefile编写--引用
  • 原文地址:https://www.cnblogs.com/lkcc/p/6280462.html
Copyright © 2011-2022 走看看