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

  • 相关阅读:
    Vue--路由
    Vue -- 双向过滤器去除html标签
    SQL表的基本操作
    .NET面试题
    MVC Razor
    MVC aspx
    CSS修改滚动条样式
    C# 制作图片验证码
    上传图片加水印
    eclipse常用快捷键
  • 原文地址:https://www.cnblogs.com/ismileboy/p/7241466.html
Copyright © 2011-2022 走看看