题目描述
思路分析
位运算的思维题
假设
L
e
f
t
Left
Left和
r
i
g
h
t
right
right的前
k
k
k位都一样,那么因为
l
e
f
t
<
=
r
i
g
h
t
left<=right
left<=right,所以
l
e
f
t
left
left的第
k
+
1
k+1
k+1位必然为
0
0
0,
r
i
g
h
t
right
right的第
k
+
1
k+1
k+1位必然为
1
1
1,那么从第
k
+
2
k+2
k+2位开始,
[
l
e
f
t
,
r
i
g
h
t
]
[left,right]
[left,right]必然存在全
1
1
1和全
0
0
0相与的情况,所以从第
k
+
2
k+2
k+2位开始全为
0
0
0
代码实现
class Solution {
public:
int rangeBitwiseAnd(int left, int right) {
int res=0;
for(int i=30;i>=0;i--){
if((left>>i&1)!=(right>>i&1)) break;
if(left>>i&1) res+=1<<i;
}
return res;
}
};