[英]What is the difference between a = 5, a(5), a{5} and a[5] in C++?
[英]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
运算符。 这个操作的结果已设置为仅位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
( mask & 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.