【发布时间】:2011-11-20 17:08:04
【问题描述】:
我一直在涉足 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++;
}
}
【问题讨论】:
-
操作位没有什么神奇或危险的——它们只是数字的单个数字。
标签: c bit-manipulation xor