负数表示负数绝对值的二进制的反码加一
按位非 (~)
~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补充,最后转换成十进制