#include <stdio.h>
int getPo(int);
int findPo(int a, int b, int p);
int rangeBitwiseAnd(int m, int n);
void main(){
int x = 59, y = 63, px, py, count, res;
count = rangeBitwiseAnd(x, y);
}
int rangeBitwiseAnd(int m, int n){
if(m==0 || n==0){
return 0;
}
if(m==n){
return m;
}
int px, py, count,res;
px = getPo(m);
py = getPo(n);
if(px!=py){
//printf("0\n");
return 0;
}else{
count = findPo(m,n,px);
res = (m>>(count))<<(count);
//printf("res:%d\n",res);
return res;
}
}
int getPo(int n){
int count = 0;
while(n>0){
n = n>>1;
count++;
}
//printf("getPo:%d\n",count);
return count;
}
int findPo(int a, int b, int p){
int pa, pb;
p--;
a = a-(1<<(p));
b = b-(1<<(p));
pa = getPo(a);
pb = getPo(b);
while(pa==pb && pa>0 && pb>0){
pa --;
a -= (1<<(pa));
b -= (1<<(pa));
pa = getPo(a);
pb = getPo(b);
}
if(pa>pb){
p = pa;
}else{
p = pb;
}
//printf("findPo:%d\n",p);
return p;
}
Bitwise AND
Guess you like
Origin blog.csdn.net/KathyLJQ/article/details/111559369
Ranking