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

    << :左移运算符,n<<1相当于 n*2
    >> :右移运算符,n>>1相等于n/2
     >>>:无符号右移,忽略
    int a=-1;
    -1的32进制位:
    源码 :     0000 0000 0000 0000 0000 0000 0000 0001
    反码 :     1111 1111 1111 1111 1111 1111 1111 1110
    补码 :     1111 1111 1111 1111 1111 1111 1111 1111 (在反码基础上+1)
    a<<2:    1111 1111 1111 1111 1111 1111 1111 1100
    a>>2:    1111 1111 1111 1111 1111 1111 1111 1111  (右移两位,左边高位再补两个1,所以看着没什么变化)
    a>>>2:  0011 1111 1111 1111 1111 1111 1111 1111  (无符号右移跟上个比起来就是高位不补1)
                
     
    上面-1 >>2看着没什么变化可以换成-5 试试:
    int  a=-5;
    System.out.println(Integer.toBinaryString(a));
    System.out.println(Integer.toBinaryString(a>>2));
    System.out.println(a>>2);
    11111111111111111111111111111011
    11111111111111111111111111111110
    -2
    -------------------------------------------------------
    int a=-5;
    System.out.println(Integer.toBinaryString(a));
    System.out.println(Integer.toBinaryString(a>>>2));
    System.out.println(a>>>2);
    11111111111111111111111111111011
    111111111111111111111111111110
    1073741822
  • 相关阅读:
    日报10.11
    日报10.9
    日报10.8
    日报10.7
    换马甲啦
    CSP2019知识点整理
    字符logo存档
    QHDYZ模拟赛20191027 提前透题
    数竞大佬jhc的三角函数复习题
    IO流
  • 原文地址:https://www.cnblogs.com/345214483-qq/p/6472136.html
Copyright © 2011-2022 走看看