[英]How to compare two bit values in C?
我一直在研究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 = a ^ b ;
00000010b = 00001111b ^ 00001101b;
^
或XOR的作用是:
0 ^ 0 = 0
1 ^ 0 = 1
0 ^ 1 = 1
1 ^ 1 = 0
一种思考的方式是:
如果两个操作数(
a
和b
)不同,则结果为1
。
如果它们相等,则结果为0
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.