位运算的共同前缀
题目:给出范围m~n,计算从m~n所有数的位与运算和
思路:显而易见的,m~n之间的二进制表示的非共同前缀部分,最终会变为0,所以有两个方法解决。
一是位移法,每次同时将m、n向右位移一位,记录位移次数,直到m与n相等,再将m或n左移相应位数,即可得到结果。
二是Brian Kernighan 算法,即利用n和n-1与运算会消除最右边的1的特点,获得共同前缀
代码如下
public int rangeBitwiseAnd(int m, int n) {
while(n>m)
原创
2020-08-23 17:22:56 ·
228 阅读 ·
0 评论