【问题标题】:why does AND in parenthesis evaluate differently than without?为什么括号中的 AND 与没有的评估不同?
【发布时间】:2021-02-22 03:43:43
【问题描述】:

在 C++ 中,4&1 == 01&1 == 1。但是,4&1 != 1&1 的计算结果为 0,而不是 1,但 (4&1) != (1&1) 的计算结果为 1,正如预期的那样。这是为什么呢?

【问题讨论】:

标签: c++ bit-manipulation operator-precedence


【解决方案1】:

关系运算符!= 有一个higher precedence,而不是按位与&

因此表达式

4 & 1 != 1 & 1

将被解析为

4 & (1 != 1) & 1

【讨论】:

  • C++ 优先规则很简单。 * 绑定比 + 更紧密,其他所有内容都使用括号。 (好吧,一元比二元更紧......通常)
  • @Yakk-AdamNevraumont C++ 优先规则在语法中占据了整个页面,并且您提出的“解决方案”都不一致(为什么不对包括@在内的所有内容都使用括号987654326@ 和 +?) 以及至少对我来说是程序员不识字的明确标志。
  • @user20 因为脑力是可以替代的,而且在 Bjarn 的读写水平之前,还有更多关于 C++ 的重要知识需要学习。记住 100 位 pi 或每个操作员的优先级都没有错,只是不应该被视为一项重要技能。
  • 同理4&1 == 04 & (1 == 0) (4&0-> 0)。
  • @Yakk-AdamNevraumont:我很确定你忽略了很多父母。 x = (f() + (g(42)));(是的,g(42) 周围有额外的父母,因为我们不会用f() + g 调用42 :)(类似于方法指针调用)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多