【发布时间】: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&b)shudder。或(a|b) & ~(a&b)
标签: c count binary bit-manipulation hamming-distance