二元比较

时间:2011-11-29 19:17:23

标签: c++ binary

c ++中是否有任何函数可以在不使用除法算法的情况下将十进制数转换为二进制数? 我想计算2个数字的二进制格式的不同位。像diff(0,2)是1位。或diff(3,15)是2位。 我想写diff功能。 感谢

3 个答案:

答案 0 :(得分:2)

您可以通过计算两个数字的xor中的位来找到不同位的数量。 这样的事情。

int count_bits(unsigned int n) {
    int result = 0;
    while(n) {
        result += 1;
        // Remove the lowest bit.
        n &= n - 1;
    }
    return result;
}

int diff(unsigned int a, unsigned int b) {
    return count_bits(a ^ b);
}

答案 1 :(得分:0)

你可以对数字使用XOR(如果Z = X XOR Y则在X和Y中设置不同的每个位在Z中将设置为1,在X和Y中设置相同的每个位将被设置到0),并使用简单的循环和移位计算结果的位。

答案 2 :(得分:0)

技术上一切都已经是二进制了。您只需要开始查看按位运算符来访问组成您正在查看的十进制数的各个位。

例如,

if (15 & 1) would check to see if 15 has its first bit turned on.
if (15 & 3) would check to see if its first 2 bits were turned on.
if (15 & 4) would check to see if its 3rd bit only was turned on.

您可以使用和/或/ xor / etc执行此操作。谷歌按位运算并阅读。