越来越发现算法的重要性,于是想要记录一下平时遇到的一些问题。
如题,就是计算整数A 和B 的二进制表示中有多少位是不同。
首先考虑一个简单地问题,如何计算一个unsigned类型的变量中1的个数?
在向右移位的过程中,我们会把最后一位直接丢弃。因此,需要判断最后一位是否为1,使用与操作符,和0000 0001 & 就能得到(假设是8bit)
使用位操作:(代码如下)
int count(unsigned A)
{
int num = 0;
while(A){
num += A & 0x01;
A >>= 1;
}
return num
}
再来想一下如何比较两个unsigned有几位不同呢?首先想到将A和B进行异或操作 A^B,那么相同的就变成了0,不同的就变成了1.再来计算A中1的个数就能得到答案了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。