如何最高效的找出一个二进制数第n个1的位置?
比如整数 430 (二进制表示为 110101110), 我想找出这个数从右边开始的第4个1出现的位置,在这个例子中是5(序数从0开始)。
有什么高效的算法么?任何语言的实现都可以。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
比如整数 430 (二进制表示为 110101110), 我想找出这个数从右边开始的第4个1出现的位置,在这个例子中是5(序数从0开始)。
有什么高效的算法么?任何语言的实现都可以。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
JS
用汇编指令效率最高,这里用python模拟一下算法~
python3
JS的写法
从右边开始会很简单,从左边开始的话,我就不写代码了,直接说下思路,很简单的。
首先拿110101110和100000000进行&操作,如果最左边的为1,自然就知道了,
然后110101110左移一位,变为101011100,再和100000000进行&操作,,,,就这样自己计数就好了。
时间复杂度O(n),这个复杂度是跑不掉的了,只是写法的优化而已,最好的写法无疑是位运算。
如果从右边开始,那就更简单了,方法同上,不过与110101110进行&运算的数变为1就可以了,然后每次移动方向变为右移,但是注意,右移分逻辑右移和算术右移,需要做个转化,具体参考https://subetter.com/articles...