我可以在 C 中使用位运算符而不是条件运算符吗? [复制]

Posted

技术标签:

【中文标题】我可以在 C 中使用位运算符而不是条件运算符吗? [复制]【英文标题】:Can I use bitwise operators instead of conditional operators in C? [duplicate] 【发布时间】:2016-10-01 00:37:51 【问题描述】:

我可以使用 & 和 |而不是 && 和 ||在 C 语言家族中?这当然不适用于对象。有什么区别吗?如果没有,那为什么条件运算符存在?

例如:

if (3 && 5) // true
if (3 & 5) // also true

【问题讨论】:

位运算符不会短路。 位运算符和逻辑运算符是不同的。 “代替”是什么意思?展示一些例子 短路是一个很大的区别。 1 && 2 为真,1 & 2 为 0(假) &&& 运算符之间存在巨大差异。例如:0x01 & 0x1000x01 && 0x101 【参考方案1】:

正如 cmets 中指出的那样:

1 && 2 为真,1 & 2 为假。

还有,

位运算符不会短路。

【讨论】:

truefalse 都不是 C 关键字。 @AndrewHenle:这就是为什么它们在我的回答中没有以固定字体出现。 WT...我第一次看到“wiki”答案。怎么办? @LPs:答案文本框的右下角有一个复选标记。您不会从答案中获得代表,而是将其打开供所有人编辑。 @AndrewHenle:多年来,我们一直使用“true”作为 C 语言中“不等于 0”的通俗同义词,因为没有 true具有更明确含义的关键字...(当然,现在有<stdbool.h>定义 true1...)【参考方案2】:

逻辑运算符和位运算符是完全不同的。逻辑运算符返回一个布尔值(0 或 1),而位运算符基于逐位应用该位运算符返回一个整数。示例:15 & 8 = 8,而 15 && 8 = 1。从语法上讲,您可以使用位运算符代替逻辑运算符,但从语义上讲这是错误的。

【讨论】:

【参考方案3】:
if (3 & 5) // also true

是的,因为按位计算 & 的结果是 1

使用 8 位:

0b00000101 &
0b00000011
------------
0b00000001

但是if ( 2 & 5 )

0b00000010 &
0b00000101
------------
0b00000000

所以它是falseif ( 2 && 5) 仍然是true;

【讨论】:

以上是关于我可以在 C 中使用位运算符而不是条件运算符吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 三元运算符可以支持 3 个条件吗?

我可以通过条件运算符执行多项任务吗?

有人知道C语言中&和^的使用方法吗?

使用位运算符的条件语句

C#如何检查null。 (value为null)或(null == value)。我们可以使用`is`运算符而不是==运算符[重复]

我可以简化这个使用逻辑否定运算符的条件语句吗?