面试问题:将一个整数转换为另一个整数所需的位交换数

时间:2010-11-08 00:07:30

标签: bit-manipulation

我的一位朋友在接受采访时被问到这个问题。我无法找到解决方案。 问题 -

编写一个函数来计算将一个整数转换为另一个整数所需的位交换数。

6 个答案:

答案 0 :(得分:7)

可用于确定哪些位不同的位操作是xor。

xor中的每个1将告诉两个整数之间的不同位。

  

int getBitSwapCount(int x,int y)   {

int count = 0;

for(int z = x^y; z!=0; z = z>> 1)
{
   count += z & 1;
}
return count; 
     

}

答案 1 :(得分:3)

面试问题不仅仅是关于解决方案,它们也是(通常更重要的是找到解决方案)让您有机会展示如何解决这样的新问题。你会如何开始这个?您是否还想了解更多信息以帮助您解决问题?是否有任何标准函数(使用常用的编程语言)?

给我们最好的机会,我们会扮演面试官,并在你去的时候提示...

答案 2 :(得分:2)

对值进行异或,然后计算结果中的1的数量

答案 3 :(得分:0)

我没有看到这个问题有什么特别之处。迭代两个整数的位,通过XOR组合当前位并在结果不等于零时递增计数器将给出两个值不同的位数。

答案 4 :(得分:0)

不同的方法

查找二进制字符串并通过动态编程计算Levenshtein distance

答案 5 :(得分:0)

取2个数字的异或(比如a& b),并计算a ^ b中的数字

int bitsSwapRequired (int a, int b){
    int count = 0;
    for (int c = a ^ b; c!=0 ; c >> 1)
        count += c & 1;
    return count;
}

我们可以做得更好,而不是简单地在检查最低有效位时反复移动c,我们可以连续地将最右边的位设置为1并计算c达到0所需的时间。操作c = c &安培; (c-1)将清除c中最右边的位设置为1。

int bitsSwapRequired (int a, int b){
    int count = 0;
    for (int c = a ^ b; c != 0; c = c & (c-1))
        count ++;
    return count;
}