目前,我正在 cppinstitute.org 学习 C 语言认证类(class)。 在其中一个测验中,有一个如下的问题来识别输出。
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 作为答案。
我说得对吗?如果不对,我错在哪里? 预先感谢!我是初学者。
最佳答案
此处,&&
的优先级高于 ||
运算符。
所以,
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
变为 false。所以,正确的输出是0。
关于CLA 认证考试中 C 运算符(operator)优先,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47244698/