【问题标题】:How to run operations with lower precedence in C before ones with higher precedence如何在具有较高优先级的操作之前在 C 中运行具有较低优先级的操作
【发布时间】: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 &amp; 65534) &amp; 1) == ((b &amp; 65534) &amp; 1)
  • 这不就是括号的全部目的吗?
  • (x &amp; 65534) &amp; 1 始终是0
  • 鉴于您正在打印的内容,预期的测试将是 if ((a &amp; 1) == (b &amp; 1)) 你为什么要将 65534 加入其中?
  • 奇怪的是你在不需要的地方有括号,但在需要的地方却没有。所以我认为这个练习的正确答案是移动括号:if ( (a &amp; 65534 &amp; 1) == (b &amp; 65534 &amp; 1) )

标签: c operator-precedence


【解决方案1】:

添加更多括号:

if ( ((a & 65534)&1) == ((b & 65534)&1) )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 2015-02-27
    • 1970-01-01
    相关资源
    最近更新 更多