按位&评测

时间:2016-07-22 07:08:36

标签: c bit-manipulation

以下示例代码:

// Note that a, b, c and d can have value of 0 or 1 only
int isAllTrue(int a, int b, int c, int d)
{
   return (a && b && c && d);

   // THIS ALSO RETURNS CORRECT VALUE
   // return (a & b & c & d);
}

如果我们知道操作数可以是0或1,那么从性能的角度来看哪个操作更可取:按位还是逻辑?这真的很重要吗?

在按位“&”的情况下评估是否停止当操作数为0?

3 个答案:

答案 0 :(得分:1)

使用&用于位操作。使用&&用于逻辑运算。如果您使用按位操作,您应该使用逻辑操作,反之亦然,读者将(a)混淆,(b)非常仔细地检查您的代码是否引入了一个微妙的错误。

编程依赖于习语。如果你的代码与预期的习语不符,那么你必须有充分的理由,你应该写一个解释原因的评论。

答案 1 :(得分:-1)

使用哪种配方并不重要,通过主动编译器优化,所有显示的评估都应该在编译时完成。

至于你的上一个问题,按位运算符不使用快捷方式评估,因此总是评估每个操作数。

答案 2 :(得分:-3)

似乎有很多关于像这样的问题的混淆......以及很多的错误答案。好吧,这是事实 for C / C ++

  • &&, || and !逻辑运算符,他们会测试 布尔表达式 - 如果值为非零,则将整数值(数字)视为true,否则为false - 无论您检查了多少个数字,但0 && 1将被评估为false,例如因为第一个0 - 它可以重写为false && true
  • &, |, ~, ^, >>, <<按位运算符,它们是掩码/赋值 位模式的积分值,你可以做很多很酷的计算 - 但是你真的需要知道在你开始这样做之前如何在你的CPU内部表示数字。

结论:你的问题没有意义 - 因为你认为这些算子是相似的......他们不是。