鉴于此语句是一个逻辑运算
((a > 5) && (b > 4))
这条语句是按位运算
((a > 5) & (b > 4))
以上两种说法并不等价。
因为(a > 5)
是{0,1}
的元素
那么,为什么我们需要逻辑运算符和按位运算
?
编辑:感谢您的所有反馈。关于逻辑运算符的短路行为,我实际上不希望出现这种行为 - 我正在为 GPU 编写代码,其中分支会降低性能:短路会导致代码中出现两个分支,而不是一个分支。
对于C中的数值比较,在不需要短路的情况下,逻辑和按位似乎具有相同的行为。就我而言,按位运算比逻辑运算更快。
对于没有将这些详细信息放入原始帖子中,我深表歉意。
最佳答案
我认为不,以这个例子(0b - 表示二进制):
a = 0b00000010
b = 0b00000100
现在,a
和 b
都不为 0。但是 a & b == 0
(由于按位 AND 的定义方式) .
但是 a && b != 0
(因为对于逻辑 AND,如果至少一个操作数为 0,则结果为 0 - a
和 情况并非如此>b
上面)。
还有短路评估,如果&&
中左操作数为0,则不会评估右操作数,因为结果肯定是0(例如,正如已经提到的0 && x = = 0
,无论 x
的值如何)。
关于c++ - 逻辑运算符与按位运算符的区别是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32300522/