首页 > 解决方案 > 如何用另一种形式表示 (x ^ y) & 1?

问题描述

我正在尝试找到两个整数之间的汉明距离,并且可以使用它:

int count = 0;
for(int i = 0; i < 32; i++)
{
   if((x ^ y) & 1) 
       count++;
   x >>= 1;
   y >>= 1;
}

但是,它不适用于:

if(x & 1 != y & 1)

当 x = 1 和 y = 4 时,正确的结果是 2。但是,第二个版本输出 1。听起来我需要学习离散逻辑。

如何重写第二个 if 语句以使其工作?

标签: c++bit-manipulation

解决方案


!=运算符的优先高于&运算符,因此所写的条件被评估为x & (1 != y) & 1,但您可能需要(x & 1) != (y & 1)


推荐阅读