【问题标题】:Counting Hamming Distance for 8-bit binary Values in C Language用 C 语言计算 8 位二进制值的汉明距离
【发布时间】:2013-11-18 10:29:42
【问题描述】:

我编写了一个新程序来比较 2 个两位无符号整数。通过汉明距离进行比较。但是我的算法并不完美。你能告诉我这段代码有什么问题吗:(非常感谢!!

这是我的计数方法;

int countHammDist(unsigned int n, unsigned int m)
{
int i=0;
unsigned int count = 0 ;
for(i=0; i<8; i++){
if( n&1 != m&1 ) {
    count++;
    }
n >>= 1;
m >>= 1;

}
return count;
}

a 和 b 8 位二进制文​​件。

 PrintInBinary(a);
 PrintInBinary(b);

 printf("\n %d", countHammDist(a,b));

让我给你看看输出;

Enter two unsigned integers (0-99): 55 64
Your choices are 55 and 64
Number A: 00110111
Number B: 01000000
Hamming distance is ; 5

【问题讨论】:

  • 不需要n和m都换档吗?否则,您每次都将 n 的第 i 位与 m 的第一位进行比较。
  • 哦,我还以为其中一个在移动,另一个保持不变,今天计算太多了,非常感谢。
  • bitcount (a^b) 应该可以解决问题。 (对于 bitcount:请参阅 stanford bit hacks)
  • 感谢您的帮助,但我不想使用 ^ :)
  • 在这种情况下,您可以使用(a|b) - (a&amp;b) shudder。或(a|b) &amp; ~(a&amp;b)

标签: c count binary bit-manipulation hamming-distance


【解决方案1】:

在 n&1 和 m&1 周围加上括号。

if ((n&1) != (m&1))

http://ideone.com/F7Kyzg

这是因为 != 在 & 之前:http://www.swansontec.com/sopc.html

【讨论】:

    【解决方案2】:

    您也需要移动 m 来比较正确的位。

    无论相等性测试是否通过,您都需要转移它们。 (将班次移到内部} 之外)

    【讨论】:

    • 方法和输出已编辑,结果增加但不正确:(
    猜你喜欢
    • 1970-01-01
    • 2015-12-20
    • 2019-04-23
    • 2014-09-25
    • 2017-04-03
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    相关资源
    最近更新 更多