java位运算符了解

位运算符

<< , >>, >>>, &, |, ^, ~
java位运算符了解

&(与运算),|(或运算), ^(异或运算)这三个在逻辑运算符里也出现过,那么如何判定是哪种呢,首先如果运算符两侧的值为布尔类型的,那么是逻辑运算符里的,结果是布尔型的;如果两侧是数值型的话,是位运算符的,结果也是数值型的。
java位运算符了解

结论:

  • 位运算符操作的都是整型的数据;

  • << :在一定范围内,每向左移1位,相当于 * 2,被移除的高位丢弃,空缺位补0;>>: 在一定范围内,每向右移1位,相当于 / 2,被移位的二进制最高位是0,右移后,空缺位补0,最高位是1,空缺位补1。

    最高效的方式计算 2 * 8?

    2 << 3 或 8 << 1

    右移,正数的话,右移,右边低位多出几位,高位空出几位。如21 >>2,左边高位空出两位,空出的两位怎么来补呢,原来最高位是0,表示是个正数,拿0来补。是负数-21的话,往右移两位的话,就是补两个1,移三位就是三个1…

    无符号右移,被移位的二进制最高位不管是0或1,空缺位都用0补。一个负数很可能移位就变成正数了。出现过在集合求hash值的时候
    ,正负数取反,各二进制码按补码各位取反;即包括符号位在内的0变1,1变0

    按位取反公式,-(A+1),对A取反

    如int a = 5; int b = ~ a,那么b = -6,两个数互为取反
    java位运算符了解

    ^ ,相同二进制位进行 ^ 运算,结果是0;1^ 1=0,0^0=0

    不同二进制位运算结果是1,1 ^ 0=1,0^1=1