今天做了几个关于位操作的题目,稍微复习了c/c++的位操作相关知识
(1)
x^y 按位异或操作
使用异或操作实现变量交换
异或操作具有可逆性,若a连续异或两次同一个数,数值仍为a
交换a,b
a = a^b;
b = a^b;
a = a^b;
(2)消除前驱0(leading-zero)
某些题目要求使用32位数的低有效位(即舍弃高位0),利用异或操作可以确定有效位
int mask = ~0; //全1
int num = 3;
while(num&mask) mask<<1;