我可以在 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 & 0x10
是 0
,0x01 && 0x10
是 1
。
【参考方案1】:
正如 cmets 中指出的那样:
1 && 2
为真,1 & 2
为假。
还有,
位运算符不会短路。
【讨论】:
true
和 false
都不是 C 关键字。
@AndrewHenle:这就是为什么它们在我的回答中没有以固定字体出现。
WT...我第一次看到“wiki”答案。怎么办?
@LPs:答案文本框的右下角有一个复选标记。您不会从答案中获得代表,而是将其打开供所有人编辑。
@AndrewHenle:多年来,我们一直使用“true”作为 C 语言中“不等于 0
”的通俗同义词,因为没有 true
具有更明确含义的关键字...(当然,现在有<stdbool.h>
定义宏 true
到1
...)【参考方案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
所以它是false
而if ( 2 && 5)
仍然是true
;
【讨论】:
以上是关于我可以在 C 中使用位运算符而不是条件运算符吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
C#如何检查null。 (value为null)或(null == value)。我们可以使用`is`运算符而不是==运算符[重复]