位运算常见技巧汇总

位运算常见技巧汇总


1. 按位与(&):按位与操作符用于将两个数的对应位进行与操作。

例如,1010 & 1100 = 1000。这个操作通常用于清零特定位或提取特定位的信息


2. 按位或(|):按位或操作符用于将两个数的对应位进行或操作。

例如,1010 | 1100 = 1110。这个操作通常用于将特定位设置为 1。


3. 按位异或(^):按位异或操作符用于将两个数的对应位进行异或操作。异或的性质是相同为0,不同为1。

例如,1010 ^ 1100 = 0110。这个操作通常用于切换特定位的值。


4. 按位取反(~):按位取反操作符用于将一个数的每一位取反(0 变为 1,1 变为 0)。

例如,~1010 = 0101。注意取反操作会受到整数的位数限制。


5. 左移(<<):左移操作符将一个数的所有位向左移动指定的位数,右侧空出的位用 0 填充。

例如,1010 << 2 = 101000左移操作相当于乘以 2 的幂。


6. 右移(>>):右移操作符将一个数的所有位向右移动指定的位数,左侧空出的位根据正负号使用符号位或者 0 填充。

例如,1010 >> 2 = 10。右移操作相当于除以 2 的幂。


7. 获取第 n 位的值

要获取一个数的第 n 位(从右向左,从 0 开始),可以使用 (num >> n) & 1 的方法。


8. 设置第 n 位的值为 1

要将一个数的第 n 位设置为 1,可以使用 num |= (1 << n)


9. 将第 n 位设置为 0

要将一个数的第 n 位设置为 0,可以使用 num &= ~(1 << n)


10. 交换两个数的值:使用异或操作可以在不使用额外变量的情况下交换两个数的值。

例如,a ^= b; b ^= a; a ^= b; 可以将变量 a 和 b 的值进行交换。


11. 判断奇偶性

要判断一个数是奇数还是偶数,可以利用二进制表示中的最低位来进行判断。
奇数的二进制表示的最低位一定是 1,偶数的最低位一定是 0。因此,可以使用 (num & 1) == 1 来判断一个数是否为奇数。


12. 计算绝对值

要计算一个整数的绝对值,可以利用其符号位。如果数为正,其符号位为 0,直接返回;如果数为负,其符号位为 1,使用取反加一的操作得到绝对值。例如,abs(num) = (num ^ (num >> 31)) - (num >> 31)


13. 判断是否为2的幂次方

如果一个数是2的幂次方,那么它的二进制表示中只有一个位为1,其余位都为0。因此,可以使用 (num & (num - 1)) == 0 来判断一个数是否为2的幂次方。这是因为2的幂次方减一后,其二进制表示中的最高位为0,其余位都为1。


14. 计算整数的平方

要计算一个整数的平方,可以利用公式 (n * n) = (1 << (2 * log2(n)))。这个技巧避免了使用乘法运算符。


15. 判断两个数是否有相同的符号

可以通过异或操作符来判断两个数是否具有相同的符号。如果两个数异或的结果为负数,说明它们具有相同的符号;如果异或的结果为非负数,则说明它们的符号不同。

后续总结的会继续更新~

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喻师傅

谢谢您!我会继续努力创作!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值