位运算

2018-11-25  本文已影响5人  bigCatloveFish
符号 描述 运算规则
& 1,1得1
| 两个0才是0。1,0为1。
^ 异或 相同为0,相异为1
~ 取反 ~0=1,~1=0
<< 左移 左移若干位高位丢弃,低位补0
>> 右移 右移若干位 高位补0

异或。

  1. 异或的规则。
x^0 = x
x^1s = ~x 
x^(~x) = 1s
x^x = 0
a^b = c => a^c = b ,b^c = a
a^b^c = a^(b^c)=(a^b)^c

2.常见的的操作

x&1==1 x&1==0 判断奇偶
x = x&(x-1)  清零最低位的1 
x&-x 得到最低位的1

3.复杂的操作

x&(~0<<n)  讲x右边n位清零
(x>>n)&1    获取x第n位的值
x&(1<<(n-1)) 获取x的第n位的幂值
x|(1<<n) 将第n位为1
x&(~(1<<n)) 将第n为为0
x&((1<<n)-1) x最高位至第n位清零
x&(~(1<<(n+1))-1)) 将第n位至第0位清零

例题

数字中1的个数

int hammingWeight(uint32_t n) {
    int number = 0;
    while(n>0){
        n = n&(n-1);
        number++;
    }
    return number;
 }
上一篇 下一篇

猜你喜欢

热点阅读