您的位置:首页 > 其它

整数A和B的二进制表示中有多少位不同

2010-10-08 10:17 288 查看
问题:给定两个正整数(二进制形式表示)A和B,问把A变为B需要改变多少位(bit)?也就是说,整数A和B的二进制表示中有多少位是不同的?
思路:对于给定的两个数,从最低位开始扫描,分别找到A和B的第一个“1”出现的位置,n1和n2
1)n1==n2,将n1(n2)位置0,继续往高位找
2)n1<n2, 说明A的n1位为1,但B的n1位为0,num++;将A的n1位置0,继续寻找A的下一个1的位置
3)n1>n2, 同2)反之
程序:
int count(int a, int b)
{
unsigned int n1,n2,num=0;
n1=a-(a&(a-1));
n2=b-(b&(b-1));
while((n1!=0)&&(n2!=0))
{
if(n1==n2)
{
a&=~n1;
b&=~n2;
n1=a-(a&(a-1));
n2=b-(b&(b-1));
}
else
{
num++;
if(n1<n2)
{a&=(~n1);n1=a-(a&(a-1));
}
else
{b&=(~n2);n2=b-(b&(b-1));
}
}
}
while(n1!=0)
{
num++;a&=(~n1);n1=a-(a&(a-1));
}
while(n2!=0)
{num++;b&=(~n2);n2=b-(b&(b-1));
}
return num;
}
复杂性分析:始终在追踪“1”,因此复杂性为O(V(A|B)),V(A|B)为A|B中的“1”的个数,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐