我正在编写一个涉及复杂的按位运算的 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++。
这是你的起始变量,填充到相同的长度。
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.