august 发表于 2006-12-11 22:10:59

问个计算的问题

程序如下:
main()
{
int x=40,y=4,z=4;
x=y==z;printf("%d\n",x);
x=x==(y=z);printf("%d\n",x);
}

为什么答案分别是1,0呢?赋值勤运算是自右向左,先不管Y跟Z本来它们都是等值的,但为什么最后
X的值是1呢?下面的零就更令我不解呢。请指教指教!

cupid 发表于 2006-12-11 22:25:40

y=z为真 x=1
第二个答案为0      先计算括号里面的4=4为真 所以为1
当计算 x==1 因为定义过x=40 所以x!=1 所以为假 为0
所以第二题x=0

august 发表于 2006-12-11 22:54:56

这些东西有时候还蛮麻烦啊

cupid 发表于 2006-12-11 23:11:53

如果为真 就是1
如果为假 就是0

wayto 发表于 2006-12-24 16:51:54

简单说,1和0在这里只是隐式转化为int类的boolen值.
其实==操作的返回值应该是boolen值true和false.
但是你用int类的变量接收,那么收到的就是转化为int的boolen值,第一个式子是真的,4等于4,所以结果是true,就是1.第二个式子是假的,40不等于1,所以结果是false,是0.

shawind 发表于 2006-12-24 20:58:33

晕,这是basic的语法么?

clamplinjun 发表于 2007-1-16 23:05:04

应该算C的语法吧
页: [1]
查看完整版本: 问个计算的问题