C#if语句解释

时间:2020-05-29 13:01:36

标签: c# logic

我对一件简单的事情感到困惑。在我看来,第4行的结果必须与第6行的结果相同。可以有人解释优化器在第5行中所做的事情。

我希望b在每一行上都会减少和增加。因此,b的值在解释该行之初必须为2。因此,结果对于第4行和第6行应该是相同的。

1. int a = 1;
2. int b = 2;
3. 
4. Console.WriteLine(a == --b && a == b++); // expected: true, real: true
5. Console.WriteLine(a == --b || a == b++); // expected: true, real: true 
6. Console.WriteLine(a == --b && a == b++); // expected: true, real: false

4 个答案:

答案 0 :(得分:4)

在第4行中,b递减并递增,剩下2。

在第5行中,b递减,然后由于a == --btrue,因此表达式短路并且b不递增,从而保留1。

第6行的a == --b现在为false

答案 1 :(得分:1)

||运算符应用short-circuit evaluation
因此,对于||运算符,如果表达式的第一项为true,则无需评估(执行)第二项。

此逻辑对您的代码的影响是,不执行第5行中表达式的第二部分,并且减量后变量b保持为1。
这导致第6行给出false作为结果

答案 2 :(得分:1)

调用4.和5.行时,它还会更改变量的值:

a为1,b为2

a == --b && a == b++ = true

a为1,b为2

a == --b && a == b++ = true

a为1,b为1,因为上述语句的第二部分未运行。如果or(||)运算符的第一部分为true,则不会执行第二部分。

a == --b && a == b++ = false

a不等于0(1-1)

答案 3 :(得分:0)

1. int a = 1;
2. int b = 2;
3. 
4. Console.WriteLine(a == --b && a == b++); // expected: true, real: true
5. Console.WriteLine(a == --b || a == b++); // expected: true, real: true 
6. Console.WriteLine(a == --b && a == b++); // expected: true, real: false

成为

1. int a = 1;
2. int b = 2;
3.

   // now: a = 1, b = 2
   // b is decremented to 1, expressions are evaluated. b is incremented to 2,
4. Console.WriteLine(1 == 1 && 1 == 1); 

   // now: a = 1, b = 2
   // b is decremented to 1, first expression is evaluated to true, 
   // that causes the second expression to be short circuited. It doesnt 
   // matter whether it is true or false, the whole expression will be true anyway.
   // So the second expression will not be executed.
5. Console.WriteLine(1 == 1);   

   // now: a = 1, b = 1
   // b is decremented to 0, expressions are evaluated, b is incremented to 1
6. Console.WriteLine(1 == 0 && 1 == 0);