#include
main() //main函数,程序入口
{
int a=4,b=8,c=5; //定义a,b,c并分别赋值为4,8,5
int d1,d2,d3,d4; //声明d1,d2,d3,d4
d1=(ab--);
//若ab这三个条件中满足一条,则d1=1,否则,若无一条满足,则d1=0,需要注意的是,由于进行的是或运算,只要有一个条件满足则结果即为真,当满足第一条ab--都没运行
printf("d1=%d,a=%d,b=%d,c=%d\n",d1,a,b,c); //分别输出d1,a,b,c的值
d2=(a>b)&&(++a==5)||(c>b--);
//由于a=4,b=8,此时a>b为假,因为后续为与运算,而与运算中只要有一个条件为假,则结果为假,前面已经知道a>b为假了,故程序会忽略掉"++a = 5"这条语句,直接运行至c>b--这里, 此时进行比较的是"c>b",其结果为假,语句结束后b自减1值为7
printf("d2=%d,a=%d,b=%d,c=%d\n",d1,a,b,c); //输出d1,a,b,c,注意是d2实际上是d1的值,故为1,后面两个输出中都是输出的d1的值
d3=(ab--);
// 由于"&&"的优先级高于"||",故该条语句相当于(ab--)),先进行"||"左边的运算,此时a=4,b=7,a printf("d3=%d,a=%d,b=%d,c=%d\n",d1,a,b,c); //输出d1,a,b,c的值
d2=(a>b)&&(++a==5)&&(c>b--); // a=4,b=7,故a>b的结果为假,由于都是与运算,一个为假则表达式的值确定为0,后续的语句便不再执行,故a,b的值都未改变
printf("d2=%d,a=%d,b=%d,c=%d\n",d1,a,b,c); //输出d1,a,b,c的值
b算的怎么感觉不对?