Jac*_*cko -1 c c++ bitwise-operators
鉴于此声明是一种逻辑操作
((a > 5) && (b > 4))
Run Code Online (Sandbox Code Playgroud)
这句话是按位运算
((a > 5) & (b > 4))
Run Code Online (Sandbox Code Playgroud)
以上两个陈述并不等同.
因为(a > 5)是元素{0,1}
那么,我们为什么需要logical operators & bitwise-operation呢?
编辑:感谢所有的反馈.关于逻辑运算符的短路行为,我实际上不希望这种行为 - 我正在为GPU编写代码,其中分支会降低性能:短路导致两个分支而不是代码中的一个分支.
对于C中的数值比较,在不需要短路的情况下,似乎逻辑和按位具有相同的行为.在我的例子中,按位运算比逻辑快.
我为没有将这些细节放在原始帖子中而道歉.
我想不,拿这个例子(0b - 表示二进制):
a = 0b00000010
b = 0b00000100
Run Code Online (Sandbox Code Playgroud)
现在,既不是a也不b是0.但是a & b == 0(由于定义了按位AND的方式).
但是a && b != 0(因为对于逻辑AND,如果至少有一个操作数为0,则结果为0 - 这a与b上面的情况不同).
还有短路评估,如果在&&左操作数为0,则不会评估正确的一个,因为结果肯定是0(例如,如已经提到的,0 && x == 0无论值是多少x).