数学-位运算

知识:
1.<<表示左移移,不分正负数,低位补0;
2.>>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;
3.>>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0

常用性质:
!!! 异或运算满足交换律和结合律,即 a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b。
在使用位运算技巧解的算法题中,有以下这些常用的性质:
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
a 与自身之间的操作

a & a = a
a | a = a
a ^ a = 0

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
a 与 0 之间的操作

a & 0 = 0
a | 0 = a
a ^ 0 = a

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
按位与、按位或的还原计算

a | ( a & b ) = a
a & ( a | b ) = a

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
通过异或完成变量值交换

a ^= b
b ^= a
a ^= b

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
判断奇偶(通过 & 1 取出最后一个二进制位以达到模 2 的效果)

a & 1 === a % 2

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
比较两值是否相等(a ^ a === 0)

a ^ b === 0

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
将第 i + 1 个二进制位设为 1

a |= 1 << i

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
将第 i + 1 个二进制位设为 0

a &= ~(1 << i)

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
取出第 i + 1 个二进制位上的数值

a & (1 << i)

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
在 a 第 i + 1 个二进制位,插入 b 对应位置的二进制位

a |= 1 << i
a & (b & 1 << i)

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
删除二进制序列中最后一个值为 1 的位置

a &= (a - 1)

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
计算 a 的相反数

-a === ~a + 1

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
保留 a 在二进制位中最后一个 1

a &= (-a)

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
生成二进制位全为 1 的数

~0

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
保留 a 二进制序列中最后的 i - 1 位,其余补 0

a & ((1 << i) - 1)

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
将 a 二进制序列中最后 i - 1 位全部置为 0

a & ~((1 << i) - 1)

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
判断 a 的二进制序列最高位是否为 1

a < 0 # 最高位为 1 必然是负数

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
在二进制序列中,仅保留最高位的 1,其他设为 0,输出该数

a = a | (a >> 1)
a = a | (a >> 2)
a = a | (a >> 4)
a = a | (a >> 8)
a = a | (a >> 16)
return (a + 1) >> 1
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值