tho*_*rca 2 c bit-manipulation xor
我一直在用C调试,我发现能够直接操作位是令人着迷和强大的(我认为这很危险).我很好奇比较C中不同位的最佳方法是什么.例如,数字15以二进制表示为:
00001111
Run Code Online (Sandbox Code Playgroud)
数字13表示为:
00001101
Run Code Online (Sandbox Code Playgroud)
如何在不计算它们的情况下比较哪些位是不同的?使用移位很容易确定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++;
}
}
Run Code Online (Sandbox Code Playgroud)
Mat*_*haq 15
使用按位运算:
c = a ^ b ;
00000010b = 00001111b ^ 00001101b;
Run Code Online (Sandbox Code Playgroud)
什么^,或XOR,做的是:
0 ^ 0 = 0
1 ^ 0 = 1
0 ^ 1 = 1
1 ^ 1 = 0
Run Code Online (Sandbox Code Playgroud)
一种思考方式是:
如果两个操作数(
a和b)不同,则结果为1.
如果它们相等,结果是0.