c++ - 逻辑与按位与

标签 c++ bit-manipulation logical-operators

我正在使用按位运算符将一些 bool 值存储在变量中。我假设我适本地存储了它们,尽管这是我的作业:

int bit = 0;
bit |= 1;
bit |= 2;
bit |= 4;
bit |= 8;

我不确定的是检查部分。我对逻辑 运算符之间的区别有一个简单的了解。这是我检查值的方法:

if ((bit & 1) && (bit & 2) && (bit & 8)) {
    std::cout << "a" << std::endl;
} 
else {
    std::cout << "b" << std::endl;  
}

我想知道那种条件是否正确(我做了一些测试,但我可能遗漏了一些东西)而且我还想知道我是否可以同时检查多个位,例如:

if (bit && (1 & 2 & 8) {
    std::cout << "a" << std::endl;
} 
else {
    std::cout << "b" << std::endl;  
}

我知道最后一个不会按预期工作(至少那是测试给我的结果),但我想说明我的想法。

最佳答案

i want to know if i can check multiple bits at the same time

是的,你可以这样做,但你的代码不正确。

  1. 1 & 2 & 8 将始终为零。您需要使用 1 | 2 | 8
  2. bit && (1 & 2 & 8) 由于上述原因不正确。

您可以使用:

if ( (bit & (1 | 2 | 8)) == (1 | 2 | 8) ) {
    std::cout << "a" << std::endl;
} 
else {
    std::cout << "b" << std::endl;  
}

表达式 (bit & 1) && (bit & 2) && (bit & 8) 在逻辑上与表达式 (bit & (1 | 2 | 8)) == (1 | 2 | 8)

https://ideone.com/KdGjiO 查看它的工作情况.

关于c++ - 逻辑与按位与,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46247382/

相关文章:

c++ - 如何以编程方式配置鼠标增强指针精度

C - 如何返回所有偶数位设置为 1、所有奇数位设置为 0 的字?

java - 下面的 IF-ELSE block 可以压缩为单个 IF 语句吗?

javascript - JavaScript 中的运算符优先级 : Can someone please explain why the if condition evaluates to true for all values of browser

c# - Windows Phone 7 - 使用 native DLL - 需要类和接口(interface)的 GUID

c++ - 将自定义 API 转换为 Ruby on Rails ActiveResource

algorithm - 压缩具有特定顺序的正整数向量 (int32)

assembly - NASM 移位运算符

java - 如何/可以同时使用 && 和 ||在相同的 if 语句条件下?

c++ - "char *"和 "String"函数的返回类型是否相同?