C语言 计算求解

1、已知a = 0 ,表达式 a = 1?b = 1:b = 0; 执行后,b的值是 1
2、若定义int a=8; float b=4.5;执行a*=a/=a-b后,a的值为 4

1、 a = 1?b = 1:b = 0 的结果是b=1,因为在C语言中,条件运算符的优先级比赋值运算符的优先级高,所以运算顺序其实是:
a = ( 1?b = 1:b = 0 )
这样写就很清楚了:1显然是真值,所以结果就是 b = 1
这句执行之后,a同时也得到了1的值;

2、赋值运算符的结合性是从右到左的,因此:
a *= a /= a- b
计算顺序是
a *= (a /= a- b )
先计算 a /= a-b,得到 a=8/(8-4.5)=8/3.5=2 (因为a是int型,所以结果自动类型转换为int)
这时 a=2,再做 a*= 2,得到的a的值就等于4了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-02
1.小哥是不是想写a = =1?b = 1:b = 0; “="是赋值运算符哦~无论什么时候都a都是1;
2. 由于你没加"()",这里的顺序应该是这样的:
从右向左:

a-b=3.500000;

(int)a/=3.500000; => a=2

(int)a*=a; => a=4;
第2个回答  2012-12-02
1.因为a=1,所以三元运算符返回(b=1)从而有b=1
2.a=a-b=3.5; a= a/3.5=2.2; a=a*2.2=4.4(如果输出格式为%d,则a=4)追问

三元运算符 a不是等于0么 怎么会是1?

追答

"a=1“是赋值运算,也就是把1赋值给a,而不是关系运算,a==1是关系运算

第3个回答  2012-12-02
第一个b是0,第二个计算就是先从右边开始算
相似回答
大家正在搜