C CLA认证考试的操作员优先级

时间:2017-11-12 01:55:24

标签: c operator-keyword

目前,我正在cppinstitute.org上学习C语言认证课程。 在其中一个测验中,有一个问题如下,以识别输出。

int i = 1,j= 1;
int w1,w2;
w1 = (i>0) && (j<0) || (i<0) &&(j>0);
w2 = (i<=0) || (j>=0) && (i>=0) || (j<=0);
printf("%d",w1 == w2);

我认为程序应该在屏幕上打印0,但测验接受打印1作为答案。

我是否正确?如果没有,我错了? 提前谢谢!我是初学者。

1 个答案:

答案 0 :(得分:0)

此处,&&的优先级高于||运算符。

所以,

w1 = (i>0) && (j<0) || (i<0) &&(j>0);   
   = 1 && 0 || 0 && 1;   
   = 0 || 0  
   = 0

w2 = (i<=0) || (j>=0) && (i>=0) || (j<=0);
   = 0 || 1 && 1 || 0
   = 0 || 1 || 0
   = 1 || 0
   = 1

因此,w1 == w2变为假。因此,正确的输出为0。