C语言中,a=b=c,a=b==c,a==(b=c),a==(b==c)有什么区别?
{int a=1,b=2,c=3;
printf("%d,%d,%d,%d\n",a=b=c,a=b==c,a==(b=c),a==(b==c));
} 展开
“=”是赋值符,把c的值赋给b赋给a,最后a、b、c的值都相等,“==”是判断符,结果为BOOL型。
1、C语言其语言同其语言般区 ,赋值操作符 与 等于 运算符C语言区。
2、= 赋值 == 等于运算 说 a=b=c, 表达式运行a值赋给b、c运行完abc值相等。
3、 a=b==c,复合表达式先a值赋给b与c比较相等则返0,否则返非零值。
4、a==(b=c),复合表达式先执行括号内容(即b值赋给c)比较a、c相等则返0否则返非零值。
5、a==(b==c),复合表达式先比较b、c值相等则返0否则返非零值比较a与(b==c)返值,看C区 = 跟 ==。
6、 PS:LZ程序风格且习惯引用stdio.h希望改附我改写程序: #include<stdio.h> int main() { int a = 1, b = 2, c = 3; printf("%d,%d,%d,%d\n", a = b = c, a = b==c, a==(b = c), a==(b==c)); return 0; } 运行结:3,0,0,0
上面的个程序运行的结果为
3
,
0
,
0
,0
C语言中,a=b=c,a=b==c,a==(b=c),a==(b==c)有什么区别:
一个是赋值,一个是逻辑,运算顺序不同,有一个优先级的不同,还有就是结合性不同,一个是向左,一个是向右。
C语言中,a=b=c,a=b==c,a==(b=c),a==(b==c)解答方法:
第一步是最后一个a==(b==c),b是2,c是3,明显不等,所以b==c的值是0,然后a是1,和0又不等,所以整个式子值为0;第二步为倒数第二个,a==(b=c),先将c赋给b,此时b和c都为3,再判断a与b是否相等,a为1,不等,整个式子为0;第三步:a=b==c,经过上一步,此时b和c都为3,所以判断b==c为真,值为1,然后将1赋给a,输出a,就是1;第四步:a=b=c,自右向左,先将c值赋给b,再将b值赋给a,输出a,即为3,结果3,1,0,0。