求助一道c语言题

来源:百度知道 编辑:UC知道 时间:2024/06/29 02:50:22
main()
{ int a=3,b=4,c=2,d;
d=a<!b&&(c=50)>b;
printf("d=%D,c=%d",d,c);
}
c为啥还等于2,不是已将50赋给c了

注意结合的优先级

这个表达式从低到高

=,&&, < (>),!

先看 a< !b;
a = 3, !b =0

a<!b 这是一个条件表达式,是有值的, 而它的值显然是0(3<0);
而C语言对于 a&&b, 如果a是假, 那么就不判断b了,
这个表达式就直接结束了。
对于 d=a<!b&&(c=50)>b;
即 d=( a<!b ) && ( (c=50)>b);
第一个考号内的已经为假, 那么就不运行第二个括号内的内容了。
这是从效率方面考虑的。

if(a && b && c&& d && e &&...)
如果a已经不成立了,那么就没有必要判断b, c, d, e....了。

这个其实有很大的应用。

if(i>=0 && a[i]...) 可以防止数组下标越界。

类似的用处还很多,在于你编程中去发现。

在d=a<!b&&(c=50)>b中,d=a<!b为假,&&后面的表达式就不用计算了。

你用的什么编辑器?

因为a<!b这个为0所以后面的表达式就没执行了

在d=a<!b&&(c=50)>b中,d=a<!b为假,&&后面的表达式就不用计算了

d=a<!b&&(c=50)>b中,d=a<!b为假,&&后面的表达式就不用计算了。