zoukankan      html  css  js  c++  java
  • java位运算和无符号运算

    计算机在底层使用的是二进制补码进行运算。

    计算规则:

      正数的原码、反码、补码是其二进制本身。

      负数的原码首先计算其二进制数,然后最高位使用1表示负数,反码是最高位不变其它位取反,补码是在反码的基础上进行+1操作。

      System.out.println( 8 >> 1);//正数进行右移位运算

          8的二进制是 0000 0000 0000 0000 0000 0000 0000 1000,进行右移1位得到二进制0000 0000 0000 0000 0000 0000 0000 0100,然后转成二进制是4
      以此类推     

       /*   1000
             *   0100    4    右移1位
             *   0010    2    右移2位
             *   0001    1    右移3位
             *   0000    0    右移4位
             * */

           System.out.println( -8 >> 1);//负数进行右移位运算  (右移高位补1)

          -8的二进制是1000 0000 0000 0000 0000 0000 0000 1000,这里最高位1表示是负数

      /*
             * 1000 0000 0000 0000 0000 0000 0000 1000 原码
             * 1111 1111 1111 1111 1111 1111 1111 0111 反码
             *                                       1
             * 1111 1111 1111 1111 1111 1111 1111 1000   补码
             * 1 1111 1111 1111 1111 1111 1111 1111 100 位运算得到的是补码然后转到原码
             * 1 0000 0000 0000 0000 0000 0000 0000 011
             *                                           1
             * 1 0000 0000 0000 0000 0000 0000 0000 100 -4  原码
             * */

       System.out.println(8<<2);//正数进行左移位运算

              /*

       * 0000 0000 0000 0000 0000 0000 0000 1000  原码

       * 0000 0000 0000 0000 0000 0000 0010 0000 位运算 32

       */

       System.out.println(-8<<2);//负数进行左移位运算(左移地位补0)
            /* 1000 0000 0000 0000 0000 0000 0000 1000   -8的原码
             * 1111 1111 1111 1111 1111 1111 1111 0111   反码
             * 1111 1111 1111 1111 1111 1111 1111 1000   补码
             * 11 1111 1111 1111 1111 1111 1111 100000  位运算
             * 10 0000 0000 0000 0000 0000 0000 011111 位运算之后补码
             * 10 0000 0000 0000 0000 0000 0000 100000 原码
             *  -32
             * */

      System.out.println(-9>>>2);无符号运算,高位进行补0,低位舍去
            /*    
             * 1000 0000 0000 0000 0000 0000 0000 1001    原码

        * 1111 1111 1111 1111 1111 1111 1111 0110 反码
             * 1111 1111 1111 1111 1111 1111 1111 0111    补码
             * 001111 1111 1111 1111 1111 1111 1111 01    移位   (移位得到的是正数,所以补码就是其本身)
             * */

  • 相关阅读:
    关于字典中可迭代的一个问题
    关于python字典还不错的一个总结
    代码17
    python文件读写,以后就用with open语句
    myeclipse配置内存
    android官网被封掉了,仅仅好用这个站点进谷歌了!嘎嘎
    IE input X 去掉文本框的叉叉和password输入框的眼睛图标
    【Bootstrap】一个PC、平板、手机同一时候使用并且美观的登陆页面
    110个经常使用Oracle函数总结
    索引
  • 原文地址:https://www.cnblogs.com/ismileboy/p/7241466.html
Copyright © 2011-2022 走看看