Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C在CLA认证考试中操作员优先_C_Operator Keyword - Fatal编程技术网

C在CLA认证考试中操作员优先

C在CLA认证考试中操作员优先,c,operator-keyword,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); inti=1,j=1; in

目前,我正在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);
inti=1,j=1;
int w1,w2;

w1=(i>0)和(j=0)| |(j这里,
&
的优先级高于
|
运算符

所以


w1=(i>0)和&(j=0)|(J因为你没有解释你是如何得出0的,我们不能告诉你什么假设是错误的,对吗?
0
在我看来似乎是正确的。也许测验中有错误,或者测验与你在这里发布的测验不一样。很遗憾没有人编写任何软件来打印C代码应该根据C标准打印的内容。如果我们例如,通过模拟C代码的执行,我们就可以找到答案。@EricPostPhill:我听说一些聪明的人使用了一种叫做“编译器”的小工具——你听说过有人成功地使用过其中一种吗?:D我的默认编译器选项会给出错误(如果你不像我那么挑剔,会发出警告),关于
错误:建议在“| |”内的“&&&”周围加括号[-Werror=括号]w1=(i>0)&&&(j=0)|(j@JonathanLeffler:我想那只是谣言。我试过使用一次编译器,它只给了我一些不可读的对象模块,没有给出答案。
(j>0)
评估结束时,由于短路规则,
w1
未评估。
(i<0)
为假,因此
&&(j>0)
中的值对结果没有影响(为假)而且它不会被计算。@JonathanLeffler:该标准定义了
&&
|
或运算符的结果及其两个操作数,因此使用这两个操作数的值是确定结果值的有效逻辑推导。快捷规则仅在该定义之后声明,并且如果不需要,则不计算cond操作数。该操作数仅与确定是否发生副作用有关;它对主要作用没有影响。
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