【发布时间】:2021-05-11 02:16:32
【问题描述】:
#include <stdio.h>
int main()
{
short int a,b;
a=1;
b=1;
if ( (a | 65534)&1 == (b | 65534)&1 )
{
printf("The rightmost bit is the same");
}
else
{
printf("The rightmost bit is different");
}
return 0;
}
}
输出: 最右边的位不同
预期: 最右边是一样的
这里“==”在“&”之前运行,这是不可取的。我可以使用另一个变量来解决这个问题,但不使用另一个变量是这个赋值的重点......
【问题讨论】:
-
((a & 65534) & 1) == ((b & 65534) & 1) -
这不就是括号的全部目的吗?
-
(x & 65534) & 1始终是0 -
鉴于您正在打印的内容,预期的测试将是
if ((a & 1) == (b & 1))你为什么要将 65534 加入其中? -
奇怪的是你在不需要的地方有括号,但在需要的地方却没有。所以我认为这个练习的正确答案是移动括号:
if ( (a & 65534 & 1) == (b & 65534 & 1) )
标签: c operator-precedence