logical OR bitwise OR interchangeable?
假设我有两个比较
1 2 3 4
| if ((length >= 524288) | (length == 0))
{
//do something...
} |
VS
1 2 3 4
| if ((length >= 524288) || (length == 0))
{
//do something...
} |
这是相同的事情,因为当你按位还是0.001万变成1?在这种情况下,使用位还是有什么特殊的原因?
- 不,if (p == NULL || p->n > 10)正常,但if ((p == NULL) | (p->n > 10))的行为不明确。
- 安德鲁。答案是C这和C相同吗?
- 它们是相同的精确运算符,并且这些运算符在其操作中是通用的
- @Kerreksb在这种情况下使用有什么特别的原因吗?我试图通读一段Arduino代码,我不知道作者为什么使用位或。
- @不,永远不要低估在野外看到坏代码的可能性。
- 您可以对无分支代码使用按位或,在这种情况下,可以最小化分支数…为了帮助分支预测,帮助编译器向量化或防止定时攻击…基本上是微观优化。
在这种情况下,位=逻辑,因为两个测试都返回0或1。
与单个|的唯一区别是,无论第一个测试的结果是什么,测试的两个部分都将被执行=>在这里使用||。
- 如对复合布尔表达式的短路评估。如果第二部分有副作用的话,会有一个不同的结论。
- 如果你正在从一个硬件寄存器中读取数据,比如说,每100毫秒读取一次,它就会触发一个bug。