为什么我的 C++ 代码会针对复杂的按位运算输出意外结果? [关闭]

问题描述 投票:0回答:1

我正在编写一个涉及复杂的按位运算的 C++ 程序,但它输出了意想不到的结果。这是导致问题的代码片段:

#include <iostream>

int main() {
    int a = 123;    // binary: 1111011
    int b = 45;     // binary:  101101
    int c = 0b111;  // binary:     111
    int d = a ^ b;
    int e = (d << 2) | (c & 0b1);
    std::cout << "The value of e is " << e << std::endl;
    return 0;
}

我预计输出为 12679,但我得到的值为 12676。有人可以解释为什么会这样吗?

我知道 ^ 运算符执行按位异或运算,而 |运算符执行按位或运算,但我不确定它们如何与 << operator and the & operator. Also, I'm not sure if the value of c is affecting the final output.

交互

有人能帮我理解这个表达式是如何被评估的以及是什么导致了意想不到的结果吗?任何帮助或解释将不胜感激!请用通俗易懂的方式解释一下,因为我还在学习C++。

c++ bitwise-operators
1个回答
1
投票

这是你的起始变量,填充到相同的长度。

int a = 123;    // binary: 1111011
int b = 45;     // binary: 0101101
int c = 0b111;  // binary: 0000111

那么

a ^ b
就是
1010110
。所以

int d = a ^ b;  // binary: 1010110

现在

d << 2
101011000
c & 0b1
1
,所以我们总共有
e
作为两者的按位或,或
101011001
。在十进制中,这是 345.

© www.soinside.com 2019 - 2024. All rights reserved.