第1个回答 2011-04-01
!
a=b=c,a=b==c,a==(b==c),a==(b==c)
第一个 a=b=c 是一个赋值语句 使得 a=b=c=3 所以输出 3
第二个 a=b==c 先对 b==c判断 即 3==3 是正确的 所以 a=1
第三个 a==(b==c) 由之前的赋值可以知道 b=c=3 所以 b==c 判断为 1
再对a==1 进行判断 ,结果为真 所以是1
第四个 和第三个一样 也是一样的
后来我在Cfree5.0测试了一下
发现用这样
#include <stdio.h>
main()
{
int a=1,b=2,c=3;
a=b=c;
a=b==c;
printf("%d",a);
}
你会发现输出的值是1
而如果是用
#include <stdio.h>
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));}
发现是 3,0,0,0
第二个是0
我怀疑是printf函数的处理表达式的问题
每一个编译器的处理 应该是不一样的
我在第二个加了括号,也没用。结果还是0
我们现在还在学逗号运算符,这些,都是我自己推的。。
仅是愚见本回答被提问者采纳
第3个回答 2011-04-01
因为先a==(b==c);运算返回0,==是关系运算符,b==c返回0 ,a==(b==c)返回0
然后 a==(b==c), 同样得到0,
a=b==c, a的值就变成0了
a=b=c a,b,c都值为3,整个表达式返回3
所以输出 3,0,0,0
第4个回答 2011-04-01
因为后面三个是“==”(等于号),显然c是不等于b的,按逻辑值处理成0.
程序如下:
#include <stdio.h>
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));}
结果为3,0,0,0