c++ - 如何用另一种形式表示 (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 语句以使其工作?
解决方案
!=
运算符的优先级高于&
运算符,因此所写的条件被评估为x & (1 != y) & 1
,但您可能需要(x & 1) != (y & 1)
。
推荐阅读
- java - PDFBox 2.0.9 - pdf 到带有 alpha 的图像
- python - 删除属于另一个单词的单词
- dns - 为什么我们可以创建两个具有相同 DNS 名称的区域?
- next.js - NextJs - 使用 fetch() 通过 POST 方法进行 api 调用 - 总是 ERR_ABORTED 400
- java - Java swing JTextArea & JScrollPane,垂直滚动有效但水平滚动无效,一行向下
- javascript - 如何在 react-native 中对 SectionList 进行分页
- python - 将每日数据重采样为工作日数据
- reactjs - 当页面首次加载时,如何在输入中使用占位符文本而不是值(今天的日期)?
- javascript - ShellJs 执行 CLI 命令
- java - 复制在模拟器上工作但在安卓设备上不工作的音频文件