我正在写一个数独求解器,我必须计算我学到的被称为int
to0
的汉明距离,例如7
(111
二进制) to的汉明0
距离3
。所以我只是这样做:
for(int dist = 0 ; num != 0 ; num>>=1) dist += (num&1);
虽然效果很好,但我觉得它有点笨拙。我试图想出一个二进制运算技巧来计算距离(主要是为了好玩),但我只能找到一种适用于距离的方法1
:
(num-1) ^ ((num<<1)-1) == num → true only if hamming dist to 0 == 1
我查看了 StackOverflow 和网络,但找不到任何东西。
假设它num
永远不是负数并且总是小于512
,是否有更好/更优雅的方式来评估它,也许是一些二元运算技巧?如果不是,鉴于上述假设,汉明距离的近似值是否总是在误差范围内< 1
?