'和'和'&'之间有什么区别在C ++中?

时间:2013-07-16 16:42:59

标签: c++

#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都是假的,但我的想法显然是错误的,为什么'和'和'&amp;'在C ++中是不一样的?

8 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:5)

and&&是逻辑AND运算符。如果两个操作数都转换为true,则会产生true

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

答案 2 :(得分:1)

单个&符号是按位的,而'和'关键字是&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp ;,

答案 3 :(得分:1)

&&and都是逻辑 and运算符,而&按位 {{1运营商。

所以

and

相当于

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

答案 4 :(得分:1)

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

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

&安培;将返回两个参数中任何位set(1)的整数。所以0b10101010&amp; 0b11110000将产生0b10100000。这对于检查标志或位掩码的任何其他用途非常有用(特别是在嵌入式世界中,您可以使用单个位而不是标志的完整字节/字/双字。)

编辑:学习了一些新内容并删除了错误的陈述。

答案 5 :(得分:0)

AND是逻辑短路&&,而&是按位运算符,处理单个位。

  

当使用逻辑运算符时,C ++仅评估从左到右的必要条件,以得出组合的关系结果,忽略其余的结果。

     

按位运算符根据表示存储值的位模式修改变量。

Here is some documentation

答案 6 :(得分:0)

&是二进制AND运算符。 此运算符的结果只有两个参数中设置为1的{​​{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(因为两个案例中最低有效位均为1)
  • 0x00000001 == mask & mask2(掩码中1的位在mask2中为0,反之亦然)
  • 0x00000000 == false

答案 7 :(得分:0)

AND相当于&amp;&amp;被视为逻辑运算符。并且&amp;是按位运算符。

按位AND(&amp;)

按位AND运算符是单个&符号:&amp ;.一个方便的助记符是布尔AND和&amp;&amp;的小版本适用于较小的部分(比特而不是字节,字符,整数等)。本质上,二进制AND只是以二进制形式获取数字每个位置的位的逻辑AND。

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

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

第一个数字的最高有效位为0,因此我们知道结果的最高有效位必须为0;在第二个最高有效位中,第二个数字的位为零,因此我们得到相同的结果。两个位都是1的唯一时间,即结果为1的唯一时间,是左起第五位。因此,

72&amp; 184 = 8

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