位运算骚操作

1. 枚举子集

unsigned int s;
for(int n=s;n ;n=(n-1)&s)
    printf(n);
printf(n);

2.找出重复次数奇偶性不同的数字

 例如2串数字,除x外完全相同,但第2串数字添加了一个x,找出x;

连续异或运算性质:

    a ^ a= 0

    0 ^ a =a

所以把所有数字连续异或,得到的为x

int ret;
for(int x: s1)
    ret^=x;
for(int x: s2)
    ret^=x;
return ret;

3.连续异或消去

 0^1^2^3 =0 

a ^ a =0

所以 4k^(4k+1)^(4k+2)^(4k+3)=0

连续n个数的异或结果,只有4种情况;

4k

4K^(4k+1) = 1

4k^(4k+1)^(4k+2) = 4k+3

4k^(4k+1)^(4k+2)^(4k+3)=0

 

位运算骚操作

上一篇:iOS alipay sdk(支付宝) web(wap/网页)回调黑屏,不完美解决方案


下一篇:android电话状态的监听