1
#include <iostream>
int main(int argc, char* argv[])
{
    unsigned long mask = 0x00000001;
    unsigned long mask1 = 0x00000001;
    unsigned long mask2 = 0x00000010;
    if ((mask and mask1) && (mask and mask2))// CONDITION_1 is True.
        std::cout << "Ohhhhhhh..." << std::endl;
    if ((mask & mask1) && (mask & mask2)) //CONDITION_2 is False.
        std::cout << "No Output..." << std::endl;
    return 0;
}

我认为 CONDITION_1 和 CONDITION_2 都是 False,但我的想法显然是错误的,为什么 C++ 中的 'and' 和 '&' 不一样?

4

8 回答 8

12

and并且&&是相同的。这是合乎逻辑的和。 &是按位与。

于 2013-07-16T16:44:44.473 回答
5

andor&&是逻辑 AND 运算符。如果true两个操作数都转换为true.

bitandor&是按位与运算符。如果设置了两个操作数的相应位,则设置结果的每一位。

于 2013-07-16T16:46:39.713 回答
1

单个&符号是按位的,而“and”关键字是 && 的替代,逻辑与。

于 2013-07-16T16:45:21.380 回答
1

&&andand都是逻辑 and运算符,while&位运算 and符。

所以

(mask and mask1) && (mask and mask2)

相当于

(mask && mask1) && (mask && mask2)
于 2013-07-16T16:46:00.547 回答
1

C/C++ 中的 2 个“与”运算符是 &&(逻辑与)和 &(按位与)。

&& 如果两个参数都是非零(真),则返回布尔结果(真/假,1/0),否则返回假。这用于确定 2 个布尔条件是否都为真。

& 将返回一个整数,两个参数中的任何位都设置为 (1)。所以 0b10101010 & 0b11110000 将产生 0b10100000。这对于检查标志或位掩码的任何其他用途很有用(尤其是在嵌入式世界中,您可能会使用单个位而不是完整的字节/字/双字作为标志)。

编辑:学到了一些新东西并删除了一个不正确的陈述。

于 2013-07-16T16:48:30.240 回答
0

AND是逻辑短路&&&而是按位运算符,作用于各个位。

当使用逻辑运算符时,C++ 只计算从左到右所需的内容以得出组合的关系结果,而忽略其余部分。

位运算符会根据表示它们存储的值的位模式来修改变量。

这是一些文档

于 2013-07-16T16:45:27.447 回答
0

&是二元AND运算符。此运算符的结果仅具有两个参数中设置为1的那些位。1

结果((mask and mask1) && (mask and mask2)

  • mask and mask1== true(== mask && mask1)
  • mask and mask2== true(== mask && mask2)
  • (true) && (true)==true

结果(mask & mask1) && (mask & mask2)

  • mask & mask1== 0x00000001(因为在这两种情况下最低有效位都是 1)
  • mask & mask2== 0x00000000(掩码中为 1 的位在掩码 2 中为 0,反之亦然)
  • (0x00000001) && (0x00000000)== 假
于 2013-07-16T16:54:20.663 回答
0

AND 等价于 && 被视为逻辑运算符。& 是位运算符。

按位与(&)

按位与运算符是一个 & 符号:&。一个方便的助记符是布尔 AND 的小版本 && 适用于较小的部分(位而不是字节、字符、整数等)。本质上,二进制 AND 只是将二进制形式的数字的每个位置中的位进行逻辑与。

例如,使用字节(char 类型):

01001000 
& 
10111000 
--------
00001000

第一个数的最高位是 0,所以我们知道结果的最高位必须是 0;在第二个最高有效位中,第二个数字的位为零,所以我们有相同的结果。唯一一次两位都是 1,也就是唯一一次结果为 1,是从左数第五位。最后,

72 & 184 = 8

逻辑 AND(&&) 逻辑 AND 运算符用于测试两个条件是否为真。如果两个条件都为真,则逻辑 AND 返回真。否则,它返回 false。

于 2014-10-22T04:27:26.240 回答