越来越发现算法的重要性,于是想要记录一下平时遇到的一些问题。
如题,就是计算整数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的个数就能得到答案了。

宇宙飞床M
49 声望5 粉丝

酷的要死