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)) {