位运算的技巧

一.左移与右移的意义
        左移n,乘2的n次方
        右移n,除以2的n次方

二.判断一个数奇偶性
        x&1判断x的二进制的最后一位是1还是0,因为一个数的二进制从倒数第二位到最高位都是2的多少次方,只有最末位可以表示为2的0次方,所以最后一位是1则为奇数,为0为偶数

三.求出x的第i位
        将x右移i位,再x&1,即(x>>i)&1,因为二进制数只有1和0,所以和0与会得到第i位是什么数

四.将x第i位设置为1
        (1<<i)|x,将1左移i位,再与x进行或运算,即可将x的第i位设置为1,此时其他位与0进行或运算则保持原数

五.将第i位设置为0
        x&(~(1<<i)),先将1左移i位,再进行非运算,如此一来x的第i位与0进行与运算,则变为0,其他位数与1进行与运算保持原数

六.判断一个数是否为2的n次方
        判断x&(x-1)==0,True:x为2的n次方
        假设一个数是2的n次方,则这个数的二进制数最高位m为1,其余位置为0,那么该数-1所得的二进制数就会是第m位为0,从m-1位往右均为1,此时两者进行与运算所得就是0

七.获取x最低位的1
        x&(-x),一个负数的补码为该数对应正数的反码+1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值