c++ - 逻辑运算符与按位运算符的区别是什么

标签 c++ c bitwise-operators

鉴于此语句是一个逻辑运算

 ((a > 5) && (b > 4))

这条语句是按位运算

   ((a > 5) & (b > 4)) 

以上两种说法并不等价。

因为(a > 5){0,1}的元素

那么,为什么我们需要逻辑运算符和按位运算

编辑:感谢您的所有反馈。关于逻辑运算符的短路行为,我实际上不希望出现这种行为 - 我正在为 GPU 编写代码,其中分支会降低性能:短路会导致代码中出现两个分支,而不是一个分支。

对于C中的数值比较,在不需要短路的情况下,逻辑和按位似乎具有相同的行为。就我而言,按位运算比逻辑运算更快。

对于没有将这些详细信息放入原始帖子中,我深表歉意。

最佳答案

我认为不,以这个例子(0b - 表示二进制):

a = 0b00000010
b = 0b00000100

现在,ab 都不为 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/

相关文章:

c - 为什么 ~0 >> 1 不移动位?

c++ - for循环包括指针

c++,析构函数有问题

c++ - Netbeans 不包括 glib.h ,即使它存在,如自动完成所示。该怎么办?

C编程: Strings

c - 为什么标准禁止将 sizeof 应用于函数

c++ - 错误 C2440 : '<function-style-cast>' : cannot convert from 'LinkedList<int>::Node *' to 'LinkedListIterator<const T>'

c - 在链表的末尾插入

c - 如何对变量进行位移并形成整个值

java - 为什么 getRGB() 方法是这样写的?是否有其他方法来编写 getRGB() 方法?