逻辑运算符与按位运算符的关键点是什么?

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中的数值比较,在不需要短路的情况下,似乎逻辑和按位具有相同的行为.在我的例子中,按位运算比逻辑快.

我为没有将这些细节放在原始帖子中而道歉.

gio*_*gim 5

我想不,拿这个例子(0b - 表示二进制):

a = 0b00000010
b = 0b00000100
Run Code Online (Sandbox Code Playgroud)

现在,既不是a也不b是0.但是a & b == 0(由于定义了按位AND的方式).

但是a && b != 0(因为对于逻辑AND,如果至少有一个操作数为0,则结果为0 - 这ab上面的情况不同).


还有短路评估,如果在&&左操作数为0,则不会评估正确的一个,因为结果肯定是0(例如,如已经提到的,0 && x == 0无论值是多少x).