(*)
两个1才为1,出0则0;
负数先进行补码转换再进行与运算
清零:将某数清零,将其所有位数与0相与,结果为0;
取指定位
判断奇偶
最末位为0为偶数,最末位为1为奇数
(+)
两个0才为0,出1则1;
相同为0,不相同为1;
交换律、结合律、xx=0,x0=1、自反(a ^ b ^ b=a ^ 0=a)
翻转指定位 10111110 ^ 00001111 = 10110001
与0相异或值不变
交换2个数
void Swap(int &a, int &b){
if (a != b){
a ^= b;
b ^= a;
a ^= b;
}
}
0变1,1变0
最低位变0
a & ~1 = 10110001 & 11111110 = 10110000
(<< >>)
所有位数左移,高位丢,低位补0
10110110 << 2 = 11011000
若
左移时舍弃的高位不包含1
,则每左移一位,相当于该数乘以2.
(>>) 所有位右移,无符号高位补0,有符号,各编译器分为算数右移(补符号位)和逻辑右移(补0)
原文:https://www.cnblogs.com/husiyu/p/15128820.html