如何比较C中的两位值?

时间:2011-09-20 02:08:23

标签: c bit-manipulation xor

我一直在尝试使用C,我发现能够直接操作位是令人着迷和强大的(我认为这很危险)。我很好奇比较C中不同位的最佳方法是什么。例如,数字15以二进制表示为:

00001111

数字13表示为:

00001101

如何在不计算它们的情况下比较哪些位有所不同?使用移位很容易确定15包含4个1并且13包含3个1,但是如何输出两者之间的差异(例如2 ^ 1点在两者之间是不同的)?我想不出一个简单的方法来做到这一点。任何指针都会非常感激!

编辑:我应该澄清一点,我知道XOR是解决这个问题的正确方法,但我遇到了实施问题。我想我的问题是一次比较一点(而不是产生差异)。我想出的解决方案是:

 void compare(int vector1, int vector2) {         
     int count = 0; 
     unsigned int xor = vector1 ^ vector2;

     while (count < bit_length) {
          if (xor % 2 == 1) { //would indicicate a difference
               printf("%d ", count);
          }
          xor >>= 1; 
          count++;
      }  
 }

1 个答案:

答案 0 :(得分:15)

使用按位操作:

c         = a         ^ b        ;
00000010b = 00001111b ^ 00001101b;

^或XOR的作用是:

0 ^ 0 = 0
1 ^ 0 = 1
0 ^ 1 = 1
1 ^ 1 = 0

考虑它的一种方法是:

  

如果两个操作数(ab)不同,则结果为1
  如果它们相等,则结果为0