c语言 这题怎么算

来源:百度知道 编辑:UC知道 时间:2024/05/27 03:26:54
main ()
{
int a=1,b=2,c=3;
printf("%d,%d,%d,%d",a=b=c,a=b==c,a==(b=c),a==(b==c));
}

说明:计算机算的结果是3,1,0,0
请问这是怎么来的?
最好说详细点

1) 首先 先计算a==(b==c)
b和c的值相等吗? 不等则(b==c)值为0
a和0 相等吗? 不等 则输出 0

此时 a=1,b=2,c=3

2)再计算 a==(b=c)
先把c的值付给b ,此时b的值为3
再 a和b的值相等吗? 不等 则输出 0

此时 a=1,b=3,c=3

3)然后计算a=b==c
先 b和c相等吗? 相等 这b==c 的值为1
再 把1赋值给a 输出 1

此时 a=1,b=3,c=3

4)最后计算a=b=c
把c的值赋给a和b 输出 3

最后的结果就是 3,1,0,0

从这一句来说:printf("%d,%d,%d,%d",a=b=c,a=b==c,a==(b=c),a==(b==c));

首先a=b=c
意思是将c的值赋给b(此时b的值是3(也就是c的值)),再将b的值赋给a(此时a的值就是3),最后输出结果就是3
......

第一个3是赋值表达式,从右边算到左边,把c赋给b,b=3,然后在把b赋给a,所以最后a=3;
第二个是个把b==c赋值给a,因为上面已经把c赋给b了,所以b==c所以b==c就为1,即a=1;
第三个是同理,a显然不等于b的,所以a==b的值为0;
第四个同理啦,由第一点可得a等于3;然后b等于c,逻辑表达式的值为1,所以a!=1即逻辑表达式a==1的值为0,就这样啦。

1.a=b=c
因为a=1;b=2;c=3
所以b先赋值给a,a就变2了,然后c赋值给b,所以最后答案是3。。。

*这时a=2,b=3,c=3

2.a=b==c
先算b==c(优先级高) 是BOOL值b等于c,所以返回1,之后1在赋值给a,所以答案变1了。。。