CLA 认证考试中 C 运算符(operator)优先

标签 c operator-keyword

目前,我正在 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/

相关文章:

c - 链表中的段错误

C++ 不匹配运算符*

使用 memcpy 与直接方法复制结构数组

c - 如何测试调用进程是否是fork

c - 从文件中读取一定数量的字节并在 C 中打印到控制台

c++ - 替代 ->operator()

php - 问号冒号运算符的含义

在 Linux 内核中创建了我自己的数据类型。现在我该如何使用它?

C++ 运算符= return *this 后的结果发生变化

javascript - JavaScript 中的运算符 : 5. 0//2.0 = 5?