繁体   English   中英

C ++中“ and”和“&”之间有什么区别?

[英]What is the difference between 'and' and '&' in 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都是False,但我的想法显然是错误的,为什么C中的'and'和'&'不相同?

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

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

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

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

&&and都是逻辑 and运算符,而&按位 and运算符。

所以

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

相当于

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

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

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

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

编辑:学习了一些新知识,并删除了错误的陈述。

AND是逻辑短路&& ,而&是按位运算符,对单个位进行运算。

使用逻辑运算符时,C ++仅从左到右评估得出组合关系结果所需的内容,而忽略其余内容。

按位运算符会考虑代表它们存储的值的位模式来修改变量。

这是一些文档

&是二进制AND运算符。 这个操作的结果已设置为仅位11的两个参数。

((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 == 0x00000000mask & mask2中为1的位在mask2中为0,反之亦然)
  • (0x00000001) && (0x00000000) ==否

AND等效于&&,被视为逻辑运算符。 和&是按位运算符。

按位AND(&)

按位AND运算符是单个&符:&。 一个方便的助记符是布尔AND和&&的小版本可用于较小的块(位而不是字节,字符,整数等)。 本质上,二进制“与”仅以二进制形式对数字的每个位置中的位进行逻辑“与”运算。

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

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

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

72&184 = 8

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM