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    移位   (移位得到的是正数,所以补码就是其本身)
             * */

  • 相关阅读:
    asp.net与javascript问题
    动态加载用户控件
    ASP.NET中实现模版的动态加载
    一个简单的购物车
    给图片加上水印效果
    用存储过程自定义分页
    上传图片及显示图片
    sql server图片的保存和读取
    Legato Single Server SertupFor RMAN
    确定裸设备上控制文件的大小
  • 原文地址:https://www.cnblogs.com/ismileboy/p/7241466.html
Copyright © 2011-2022 走看看