C 是否可以用位或(|)代替逻辑或(| |)?

C 是否可以用位或(|)代替逻辑或(| |)?,c,C,我发现了以下代码: /* WMF or IF2 frames */ if ((input_format == MIME_IETF) | (input_format == IF2)) { .... 资料来源: 我不相信这是程序员的真实意图。但我发现它不会引起真正的问题。我想知道这是否会导致问题。相等运算符==的结果是0或1。根据本手册第6.5.9节: 3==(等于)和=(不等于)运算符与关系运算符类似,只是它们的下限不同 优先权如果指定了 关系为true,如果为false,则为0。结果为 键

我发现了以下代码:

/* WMF or IF2 frames */
if ((input_format == MIME_IETF) | (input_format == IF2)) {
  ....
资料来源:


我不相信这是程序员的真实意图。但我发现它不会引起真正的问题。我想知道这是否会导致问题。

相等运算符
==
的结果是0或1。根据本手册第6.5.9节:

3
==
(等于)和
=
(不等于)运算符与关系运算符类似,只是它们的下限不同 优先权如果指定了 关系为true,如果为false,则为0。结果为 键入
int
。对于任何一对操作数,正好是 关系是真实的

这意味着结果不能超过最低有效位集,这意味着操作数的按位OR(
|
)相当于操作数的逻辑OR(
|

现在来演示一下。暂时忽略每个
=
运算符的实际操作数,有4种可能的结果:

0 | 0 == 0
0 | 1 == 1
1 | 0 == 1
1 | 1 == 1
如果我们改为使用
|
操作符,我们有:

0 || 0 == 0
0 || 1 == 1
1 || 0 == 1
1 || 1 == 1
给定表达式,它看起来像是逻辑的OR,因此最好在此处使用
|
运算符,以避免混淆读者。

使用逻辑的“OR”,仅当前半部分为false时才计算后半部分

使用一个位智能“or”,两个参数都将被计算

if ((input_format == MIME_IETF) | (input_format == IF2)) {
OP的代码为
if((input_format==MIME_IETF)|(input_format==IF2)){
,可能差别不大

我想知道这是否会引起问题

如果
input\u format、IF2、MIME\u IETF
都是简单的变量或常量,那么这里使用
|
的功能是相同的。编译器甚至可能发出相同的代码


我建议编写最容易理解的代码。就目前情况而言,它造成的问题是代码审查中不必要的停顿。

“此错误会导致问题吗?”“此错误会导致问题吗?”不言自明。错误=问题。修复它。你能告诉我问题会导致什么吗?这不是我的代码,这是一个开源项目。你为什么认为这会导致问题?@DavidBowling哇,对不起。我累了。没注意到你不是OP lol。哪种语言?你标记了两种非常不同的语言。选择一种!
if ((input_format == MIME_IETF) | (input_format == IF2)) {