我一直在尝试使用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++;
}
}
答案 0 :(得分:15)
使用按位操作:
c = a ^ b ;
00000010b = 00001111b ^ 00001101b;
^
或XOR的作用是:
0 ^ 0 = 0
1 ^ 0 = 1
0 ^ 1 = 1
1 ^ 1 = 0
考虑它的一种方法是:
如果两个操作数(
a
和b
)不同,则结果为1
。
如果它们相等,则结果为0
。