为什么输出为0(= false)?

时间:2020-11-08 15:35:07

标签: c++ visual-c++ operators logical-operators

我正在用C ++行使运算符,但我不理解下面的代码输出

int x = 21, z = 33, y = 43;
cout << (!(z < y&& x < z) || !(x = z - y)) << endl;

我以真实的想法写了它,并且我理解为“不是z小于y且x小于z的情况(这是错误的),或者x等于差之差的情况。 z和y(正确)”,因此我期望输出1(= true),但我感到困惑,事实并非如此。你能解释一下我在哪里犯错吗?

编辑:感谢您的回答,很有趣的是,我实际上犯了这么小的错误。

2 个答案:

答案 0 :(得分:1)

您误解的部分:

!(x = z - y))

x = z - y是分配。结果产生-10-10不是0,因此否定它会产生false

现在,表达式的第一部分:

!(z < y&& x < z) 
!(33 < 43 && 21 < 33) 
!(true && true) 
!(true)  
false

将它们放在一起:

(false || false) == false

答案 1 :(得分:0)

=是一个赋值运算符。它分配值。 ==是比较运算符。它用于比较两个值。

int value = 5, value2 = 12;
if(value == value2)
{
    // do something if value and value2 are EQUAL (which they are not)
}

有关C ++中运算符的更多信息,请参见this link