位操作符

负数表示负数绝对值的二进制的反码加一

按位非 (~)

~num ---> 返回num的反码 本质:操作数的负值减1,但是按位非实在数值表示的最底层执行操作的,所以运行速度会更快

按位与 (&)

num1 & num2 ----> num1和num2数值的二进制的每一位对齐,当两个数值同为1时返回1,有0时返回0

按位

num1 | num2 --->num1和num2数值的二进制的每一位对齐,当两个数值有一个为1时,返回1,两个都为0时返回0

按位异或 (^)

num1 ^ num2 ---> num1和num2数值对应为上只有一个1时返回,如果两个同为1或者0返回0 特点:a两次异或同一个数返回a (a = a ^ b ^ b 返回a)
用途:

  • 能实现两个值得交换,不必使用临时变量
    例如交换两个整数a=10100001,b=00000110的值,可通过下列语句实现:
        a = a^b;   //a=10100111
        b = b^a;   //b=10100001
        a = a^b;   //a=00000110
  • 快速判断两个值是否相等
    判断两个整数a,b是否相等,则可通过下列语句实现:
    return ((a ^ b) == 0)
左移 (<<)

num << 5 ---> 这个操作符会将数值的所有位向左移动指定的位数,用0补充,左移不会影响操作数的符号位,如果将 -2 << 5 得到 -64

有符号右移 (>>)

num >> 5 ----> 这个操作符会将数值向右移动,但保留符号位,用符号位填充空位

无符号位右移 (>>>)

num >>> 5 ----> 让数值包括符号位会向右移动,正数的无符号右移与有符号右移一致。而负数的无符号位移会先得出二进制码(负数的绝对值的二进制码的反码),再右移用0补充,最后转换成十进制

推荐阅读更多精彩内容