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);