位运算的tricks 系列1

7 篇文章 0 订阅
6 篇文章 0 订阅

以下内容就不讲位运算的基础了,需要复习位运算的同学,可以参考我的以下文章
位运算基础
位运算例子

为什么要介绍位运算呢?位运算更符合计算机的运行方式,即使是用C,C++,Java,python,VB,等编程语言,到最后都会被变成二进制文件,让运算器进行位运算。因此,我们帮计算机做好了标识符的转换,这样就让程序跑的快一点。

技巧一:
用o(1)时间检查整数n是否是2的幂次

首先思路分析:
N如果是2的幂次,则N满足两个条件。
1.N >0
2.N的二进制表示中只有一个1 1111对应8421慢慢体会
因为N的二进制表示中只有一个1,所以使用N & (N - 1)将N唯一的一个1消去,应该返回0。

技巧二
消去二进制中的最后一位1

x & (x - 1) 用于消去x最后一位的1
x = 1100
x - 1 = 1011
x & (x - 1) = 1000

技巧三
计算在一个 二进制数中有多少个 1。
利用一个变量count
由x & (x - 1)消去x最后一位的1可知。不断使用 x & (x - 1) 消去x最后一位的1,计算总共消去了多少次即可。count++即可
技巧四
二进制或者别的进制,别的进制需要先转进制
后续我会放出进制转换函数,调用即可,先留个位置

如果要将整数A转换为B,需要改变多少个bit位?
思路
将整数A转换为B,如果A和B在第i(0<=i<32)个位上相等,则不需要改变这个BIT位,如果在第i位上不相等,则需要改变这个BIT位。所以问题转化为了A和B有多少个BIT位不相同。联想到位运算有一个异或操作,相同为0,相异为1,所以问题转变成了计算A异或B之后这个数中1的个数。
技巧五
给出 2 * n + 1个数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字

a ^ b ^ b = a

思路
因为只有一个数恰好出现一个,剩下的都出现过两次,所以只要将所有的数异或起来,就可以得到唯一的那个数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值