C语言中,a=b=c,a=b==c,a==(b=c),a==(b==c)有什么区别

   更新日期:2024.03.28
首先谢谢楼主,这个问题真好!我刚才的回答错了,现在删了重答,不过执行的结果还是3,1,0,0 这个我实际操作过了。首先=和==的意思楼上各位已经说的很清楚了,一个是赋值,一个是判断,==的优先级高于=,==两边的值若相等,则判断为真,整个表达式的值为1,否则为0。这是前提,下面来看这个问题。刚才我的错误在误以为printf函数是自左向右执行,就像我们的书写习惯一样,不过实际不是。由于printf执行参数输出时是压栈操作(为了支持不定个数的参数的输出,故从后向前执行),所以会先对最后一个进行操作,也就是从右向左输出(脸红,老师貌似也讲过,不过。。。悔不该当初啊)。所以整个printf执行步骤如下:第一步是最后一个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。这个题目告诉我们上课一定要认真听讲(再次脸红)。累死我了。

其实就是两个表达式的值:
赋值表达式:a=b的值是b,执行后a为b的值
关系表达式:a==b可能是 0(当a和b不相等),1(当a和b的值相等)
实例分析如下:
a=b=c执行结果是a、b、c都等于3,整个a=b=c的赋值表达式值(即要打印出来的值)也是3
a=b==c:运算符优先级相当于:a=(b==c);对于关系表达式a==c的值为0,故相当于a=0,而a=0表达式的值是0(即打印出来的值)
以此类推

=是赋值语句 是将后头的赋给前边的变量
==是逻辑语句 是判断符号两边是否相等的
printf是从后往前判断的所以
你这个题重先判断a==(b==c)这个语句 结果为0
再判断a=b==c 因为b=c 所以b=3 a==(b=c)结果为0
再判断a=b==c 因为==优先级高 所以 b==c的结果是1 所以a=1 所以结果是1
最后判断a=b=c 从右向左算 所以最后结果为1
所以答案应该是 1,1,0,0

“=”是赋值符,把c的值赋给b赋给a,最后a、b、c的值都相等,“==”是判断符,结果为BOOL型。



a=b=c b=3;a=3;
a=b==c b==c结果为1,再a=1,输出为3;
a==(b=c) 等价于a==3,输出为1;
a==(b==c) b==c结果为1,a==1结果为0,输出为0;
最后的输出是 3,3,1,0

  • 15072118754 :c语言a=b=c,a的值是不是与b c的值一样
    蒲胃封4318 :答:在c语言中,a=b=c,相当于把c的值,赋值到a,b,中,所以a的值只有c 相同,希望回答对你有帮助
  • 15072118754 :c语言a==b==c跟a==b&&b==c的区别
    蒲胃封4318 :答:首先,你如果真的在做编程的话,建议千万不要采用第一种方式,不管是哪门语言都一样,因为它计算 a==b 时,得出 一个逻辑值0或者1 ,然后再用这个逻辑值去与C比较,那肯定是不对的,而第二个式子,先计算 A==B...
  • 15072118754 :...a=1,b=2,c=3; printf("%d,%d,%d,%d\n",a=b=c,a=b==c,a==(b==c...
    蒲胃封4318 :答:a=b=c //将c的值3赋给b,再将b=c的值3赋给a,整个表达式的值是3 a=b==c //VC2005测试结果是3,我自己算应该是1,这个我不是很清楚。a==(b==c) //先判断b==c,结果是1,再判断a==1,结果...
  • 15072118754 :c语言a==b==c跟a==b&&b==c的区别
    蒲胃封4318 :答:这个涉及到运算符的优先级问题,!= (不等于)运算符的优先级要大于&&(逻辑与)的优先级,在运算中优先级高的运算符先参与运算,其实是这样的 if((a!=c)&&(a!=b)&&(b!=c));如果a不等于c,并且a不等于b...
  • 15072118754 :c语言数组c语言 if(a=b=c==0) break;代表什么意思啊!
    蒲胃封4318 :答:具体如下的例子:include<stdio.h> void main(){ int a,b,c = 0;if(a = b = c == 0) printf("a = b = c == 0\n");printf("a = %d,b = %d,c = %d\n",a,b,c);c = 1;if(a = b =...
  • 15072118754 :在c语言中a==b==c与a==b,b==c有区别吗?
    蒲胃封4318 :答:((a==b) ==c )若a=5,b=5,c=5,则a==b的值为1,而1==c的结果为0 a==b,b==c是分别判断a和b以及b和c关系运算 补充,楼上说a==b==c是先执行b==c是错误的,因为C语言中只有赋值运算符和单目运算符...
  • 15072118754 :C语言里面 a=b; b=c; c=d; 是什么意思?顺序什么样?
    蒲胃封4318 :答:执行顺序:从上到下 下面的结果是:2 3 4 4 自己好好消化消化 include <stdio.h> void main(){ int a=1,b=2,c=3,d=4;a=b;b=c;c=d;printf("%d %d %d %d",a,b,c,d);} ...
  • 15072118754 :C语言中 a=b,c 和a=(b,c) 的值分别是多少
    蒲胃封4318 :答:a=b,c) 这样d的值就和c的值一样了,所以在a=b,c;之后a和b的值一样 在第二个表达式中,逗号表达式用括号括起来了,所以先计算逗号运算,结果为最右边的值,所以括号后的结果就为c的值,这时a和c的值相等 ...
  • 15072118754 :请问c语言中 a==b?c:d 和 a?b == c :d这两个三目运算是什么意思?_百度...
    蒲胃封4318 :答:第一个理解是对的。第二个,如果a的值是0,结果就是d,如果a不为0,结果就是b==c的值,b==c是关系表达式,其结果是逻辑值1或0
  • 15072118754 :c语言中三个整型数a b c怎么进行值的互换
    蒲胃封4318 :答:int a,b,c,t;scanf("%d d d",&a,&b,&c);if(a>b){t=a;a=b;b=t;} if(a>c){t=a;a=c;c=t;} if(b>c){t=b;b=c;c=t;} printf("从小到大的排列是:%d d d\n",a,b,c);...
  • 相关链接

    欢迎反馈与建议,请联系电邮
    2024 © 视觉网