【问题标题】:How to compare two bit values in C?如何比较C中的两个位值?
【发布时间】: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


【解决方案1】:

使用按位运算:

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

^ 或 XOR 所做的是:

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

一种思考方式是:

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

【讨论】:

    猜你喜欢
    • 2013-02-22
    • 2017-10-01
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    相关资源
    最近更新 更多