C ++中比较器语句的含义

时间:2014-05-11 09:25:54

标签: c++ if-statement comparator

我正在用C ++阅读这段代码 http://ajmarin.alwaysdata.net/codes/problems/952/并且我不明白代码中的这个&=

int k = 5;
int ts = 5;
bool possible = true;

它有这条线:

if(!(possible &= k == ts)) 
    break;

我想知道"&="是什么意思我是C ++语言的新手,而且我从来没有见过类似这样的东西,例如在java中,或者至少我不知道含义。

语句的右侧返回"1",因为(k == ts)(5 == 5)但左手(possible &= k)不在&#39 ; t知道意思..

谢谢

3 个答案:

答案 0 :(得分:5)

它相当于:

possible &= (k == ts);
if (! possible)

并进一步等同于

possible = possible & (k == ts);
if (! possible)

此处,&是按位AND。如果num & 0的最低有效位为0num & 1,则1将始终为您提供num1将为您提供0否则。

要继续阅读,请查看

答案 1 :(得分:2)

这是一个按位AND分配,它是Compound Assignment Operator。它等同于以下声明:

possible = possible & (k == ts);
if(!possible)
    ....

请注意,您的原始代码样式被许多人视为反模式,您通常应避免在if语句中进行分配(例如herehere)。

答案 2 :(得分:1)

& = Bitwise AND将结果分配给lhs(a& = b => a = a& b)。 (比如+ =)

它将执行逻辑AND并将结果分配给可能。


由于Operator precedence,表达式将类似于:possible &= (k == ts)

这意味着它将评估(k == ts)导致布尔值,使其成为逻辑,并使用possible将其存储在possible中并作为结果返回。