必刷算法100题之位运算概念

常见位运算总结

1. 基础位运算

<< 左移,右边填充0, 每左移一次, 相当于数字乘以2

>> 右移, 左边填充0(正数) ,负数(保持符号位),相当于数字除2

~按位取反, 反转整数每一位, 从而得到和原数值相反数

& 有0就是0

I  有1就是1

^ 相同为0, 相异为1/无进位相加

2. 给定一个数n, 确定它的二进制表示中的第x为是0还是1

 约定从低位开始

先让n右移x为,再&上一个1, 如果是1就返回1, 如果是0,就返回0. 正好和之前的值是一 一对应的关系

我们&1之后,其他位的结果都是0,我们只考虑最低位即可

运算符优先级, 能加括号就+括号,因此上面的操作 (n>>x)&1

3. 将一个数n的二进制表示第x位修改为1

对x位按位或上一个1,其他位或上0

获得这么一个数, 就需要让1<<x位, 然后 n =  n |(1<<x)

4. 将一个数n的二进制表示的第x位修改成0

将第x位&上一个0,其他位&1(其余位保持不变)

我们获得这个数, 就是让1<<x位,然后取反

n = (~(1<<x))&n

5. 位图的思想

        位图的本质: 就是一个哈希表

        之前存信息int[]的哈希表

        现在用int的二进制位来保存信息

        此时我们用一个变量就可以实现增删查改

6. 提取一个数(n)二进制表示中最右侧的1(lowbit)

把最右边的1提取出来,其他位数都是0

n&-n   -n是把最右侧的1, 左边区域全部变成相反的,然后&,左边的区域就是0,右边的区域-n的时候就变成0了

7. 干掉一个数(n)二进制表示中最右侧的1

干掉1, 表示把那一位变成0

n & (n -1)  n-1的意思是一直往左边借位,知道遇到1为止,1本身被借走了,该位变成0, 右边的数都变成1,左边的区域不变. 

6,7可以写,191,338,461题

8. 异或运算律

1. a ^ 0 = a

2. a^a=0

3. a^b^c = a^(b^c) -> 结合律

3, 我们用无进位相加来看, 相当于1的抵消

136, 260

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值