c++ - 按位运算的意外结果为什么 (1 | 1 & 2) 给出 1 而不是 2?

标签 c++ c visual-c++

无法使用 visual studio 2010 直接进行这种简单的计算

std::cout<<(1 | 1 & 2);    

//gives the value 1, was expecting 2 since 1 | 1 = 2 , the & 2   gives 2


std::cout<<( (1 | 1) & 2); 

//gives the value 0, why is this different from above?

最佳答案

第一种情况:

1 & 2//因为 & 的优先级高于 |

 01
&10
----
 00

并将结果与​​ 1 进行或运算,

   1
OR 0
-----
   1

第二种情况

1 | 1

   01
OR 01
----
   01

and AND 结果与 2,

   01
&  10
-----
   0

关于c++ - 按位运算的意外结果为什么 (1 | 1 & 2) 给出 1 而不是 2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22900086/

相关文章:

c++ - 获取 : error C2668: 'sqrt' : ambiguous call to overloaded function

c++ - "lossless" float 到字节的转换

c++ - 将结构作为 char 缓冲区传递给 proc 条目

c - 自动测试字符串处理功能

c# - 使用命名管道的两种 C++ 到 C# 通信

c++ - 用VS编译器在Qt中编译dll以便在Borland中使用

c++ - 清除字符串变量内容的不同方法之间有什么区别吗?

c++ - 在类函数中重载按位 And(&) 运算符和 "*this"

c++ - 遇到中断语句时重新初始化指针变量

c - 当选项是 C 上的字符串时如何使用 getopt?