数字范围按位与
给定初始数字到结尾数字,求其所有数字按位与的结果。
public int rangeBitwiseAnd(int left, int right) {
int head = 1 << 30;
int res = 0;
while (head > 0 && ((left&head) == (right&head))) {
res |= left&head;
head >>= 1;
}
return res;
}
数字叠加按位与,其公共前缀部分是不会受影响的,而非公共部分因必然会遍历到011111…和1000…(非公共部分的第一位必然不同即0和1,那么两种数值切换点即上述数值)所以按位与结果必然为0;
那么思路就是取出公共前缀即可。int数据去除符号位总共31位,1<<30就是从第31位开始遍历,(left&head) == (right&head)用于判断所遍历到的前缀是否相等;res |= left&head;因为head就是1从高位逐渐降下来,那么left&head就是从高到低逐位取值,res|=就是将值赋到res上。
按位与运算在数字范围内的应用
该博客探讨了如何在给定数字范围内进行按位与操作,以找出所有数字的公共前缀。通过从最高位开始逐位比较,直到找到不相等的位或者头部位为0,最终得到的结果即为公共前缀。这种方法在处理位运算和数字处理问题时具有重要意义。
504

被折叠的 条评论
为什么被折叠?



