位运算

梦想游戏人
目录:
C/C++

注意均以内存中的形式运算,即负数为补码  和有符号 无符号区别

& 与 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差不多,
Scroll Up