为什么下面代码的运行结果是a=4 b=1
a=4 b=1
条件语句也进行运算吗?
using System;
using System.Collections.Generic;
using System.Text;
namespace 例3_04
{
class Program
{
static void Main(string[] args)
{
int a = 3, b = 2;
if (a > b && a++ > b--)
Console.WriteLine("a={0} b={1}", a, b);
if (a > b || a-- > b++)
Console.WriteLine("a={0} b={1}", a, b);
Console.ReadKey();
}
}
}
if (a > b && a++ > b--):相当于执行if(a>b && a>b)再a++;b--;因此比较成立,并且a变为3,b变为1
第二个 if (a > b || a-- > b++)中,|| 前的 a>b 成立,则if条件一定为true,|| 后语句不再执行,因此a--和b++未进行运算
第1个if表达式 if (a > b && a++ > b--) 中a++>b-- ,
先执行比较 a > b , 然后执行 a=a+1,b=b-1的赋值工作 。
即 3 > 2 ,然后 a = 3+1, b= 2-1 ,得到a=4,b=1.
注意:a++ 和 ++a的区别
第2个if表达式if( a > b || a--> b++)
当执行完a>b之后,即4>1之后,并不再执行或后面的表达式。所以a和b没有变化。
这也就是和 & 与&& , 或 | 与 || 运算符的区别。
1.运行了第一个if语句,再运行第二个if语句。
2.if (a > b && a++ > b--)两个条件成立,所以&&为true,先执行对比运行再a++与b--。此时a=4,b=1。
3.if (a > b || a-- > b++)中第一个条件成立,第二个条件不成立,但只要有一个成立,||就为true。a++ > b--先做比较再a-1,b+1(等于if(a>b=true)then a++,b--),但由于条件不成立,所以不会执行下一步操作(a--,b++操作)
4.&&与||都成立,所以输出两次a,b值,但是||中a,b值没有改变,所以两次输出一样。
5.a++先执行完a再a++,++a先a=a+1再执行a操作