c语言困惑

来源:百度知道 编辑:UC知道 时间:2024/06/24 18:13:50
(1)
#include<stdio.h>
void main()
{
int a,b,c,d,e,f;
a=1, b=2, c=3, d=4, e=5, f= 5;
!f&&(e=a>b) ;
printf("e=%d,f=%d",e,f);{5,5}
getch();

#include<stdio.h>
void main()
{
int a,b,c,d,e,f;
a=1, b=2, c=3, d=4, e=5, f= 5;
(e=a>b)&&!f ;
printf("e=%d,f=%d",e,f);{0,5}
getch();#include<stdio.h>
void main()
{
int a,b,c,d,e,f;
a=1, b=2, c=3, d=4, e=5, f= 5;
!f&&(e=a>b) ;
printf("e=%d,f=%d",e,f); 答案是{e=5,f=5}
getch();

(2)
#include<stdio.h>
void main()
{
int a,b,c,d,e,f;
a=1, b=2, c=3, d=4, e=5, f= 5;
(e=a>b)&&!f ;
printf("e=%d,f=%d",e,f); 答案是{e=0,f=5}
getch();
我认为(1)的答案应该是 e=0,f=5 ,因为运行时 应该先进行圆括号里的运算 ,及是(e=c>d)先运算 得到 e=0.

&& || , 这几个运算符的前后是完全分开计算的, 可以看做是两个独立的表达式, 它们之间是从左到右计算。

其实你对运算符优先级的理解有问题。 ()虽然是表示最高优先级, 但并不意味着这一块就先算, 所谓“优先级”其实是结合性方面的优先, 而不是计算顺序上的优先, 比如说 a+b > c*d 这个表达式,优先级决定了计算的结合方式(如果比如说>有了更高的优先级那这个式子就表达不同的意思了,这就是优先级的作用), 而不表示c*d要比a+b先算。

既然优先级不决定谁先计算, 那是什么决定 a+b和c*d哪个先算呢? 在C语言里,是编译器决定(也就是什么情况都可能)。 如果先算a+b和先算c*d会产生不同的计算结果呢(如果有自增之类的)?所有这样有歧义的表达式都是C语言标准不接受的。 正因为C语言标准保护了这个问题,所以很多人也就根本搞不清“优先级”这三个字的意思, 不过无所谓,只要你写的是符合标准的表达式,搞不清也不影响什么

与运算 先进行&&前的比较 当&&前的值为真时计算后面的 ()的优先级是比&&高 但是顺序靠后

你的源文件有点乱。
#include<stdio.h>
void main()
{
int a,b,c,d,e,f;
a=1, b=2, c=3, d=4, e=5, f= 5;
!f&&(e=a>b) ;//这句好像是不会被执行的吧,所以输出的就是A和F的本身数值
printf("e=%d,f=%d",e,f);{5,5}
getch();

#include<stdio.h>
void main()
{
int a,b,c,d,e,f;
a=1, b=2, c=3, d=4, e=5, f= 5;
(e=a>b)&&!f ;
printf("e=%d,f=%d",e,f);{0,5}
getch();#includ