位运算
注意均以内存中的形式运算,即负数为补码 和有符号 无符号区别
& 与 and
都为1才为1,其余为0 二进制001 & 101 = 001 十进制1&-1=1 , 00000001 &1
| 或 or
有一个为1就为1,都为0才为0 二进制001|011=011; 十进制1|-1=-1 , 00000001 |
^ 异或 xor
相同为0,不同为1 二进制010 ^ 011 = 001 十进制 1^-1 =-2 ,00000001 ^ 原码 00000001 10000001 10000000//明显结果不对 补码 00000001 11111111 11111110 =-2//所以运算时是补码参与运算 而不是原码
~取反 not
二进制位取反 二进制 ~011 = 100 十进制 ~1 =2 000000001 111111110 十进制~-1=0 111111111 000000000
例
交换2个数
a=a^b; b=a^b; a=a^b;//时间效率和常规swap差不多,