IF语句与逻辑或运算符

3
if(1 == 2 || 4)
{
cout<<"True";
}
else
{
cout<<"False";
}

我读懂了上面的内容。如果1等于2或4,则打印true。否则,打印false。但是当执行此操作时...会打印true。显然我在这里误解了什么。1不等于2或4。那不应该是false吗?


添加括号以澄清表达式可能有助于您了解正在发生的情况:if ((1 == 2) || 4) - Neil Kirk
谢谢大家的评论。我现在明白了(我想)。我的困惑来自于一个错误的前提,我相信。在逻辑上,有逻辑析取,“A或B”的语句是真的,如果A是真的。“A或B”的语句是真的,如果B是真的。“A或B”的语句是假的,当A和B都不是真的时。我一开始看(if(1 == 2 || 4)时,认为它既不是真的也不是假的,但一旦它被评估,它就变成了假的,因为1不等于2或4。我想我一直以错误的方式看待它。再次感谢大家。 - Mike York
1
这是相当基础的内容,我建议你阅读一本关于C++的好书 - Captain Obvlious
我是C++(和编程总体)的新手,刚开始阅读Bjarne Stroustrup的《使用C++进行编程:原理与实践》。我不得不使用逻辑或运算符编写if语句,但有些地方出了问题。现在我明白了,我当时的思路是错误的。 - Mike York
5个回答

9

是的,我也犯了同样的错误。

再读一遍这个句子:

如果1等于2或4,则打印true。

"2"和"4"都是指"If 1 is equal to [...]"。这意味着,该句子只是以下缩写:

如果1等于2或1等于4,则打印true。

这将引导我们进入if从句。

if (1 == 2 || 1 == 4)

相反。


1 == 2 || 4 是true,因为 (1 == 2) == false4 == true 进行OR操作,得到true (false OR true = true)。


2
这是我的理解,如果1等于2或4,则打印true。否则,打印false。但是当执行时...会打印true。很明显我在这里有误解。1不等于2或4。那么它不应该是false吗?
不,1等于2或4。4是true(因为它不是零)。因此,“或4”中的任何内容也为true。因此,“1等于2或4”是true。

这是否意味着以下代码会输出True? { if(1 == 2 || 0) { cout<<"True"; } else { cout<<"False"; } } - Mike York
@MikeYork 不行。因为或运算符两边都不成立。1 不等于 2。0 为假。 - David Schwartz

1

在这个短语中

如果1等于2或4,则打印true

您需要添加一对单词以获得正确的等效C++短语

如果1等于2或等于4,则打印true

因此,它将如下所示

if ( 1 == 2 or 1 == 4 )
{
    cout << "True";
}
else
{
    cout<<"False";
}

关于原始条件。
1 == 2 || 4

然后编译器会按照以下方式考虑它(由于运算符的优先级):
( 1 == 2 ) || 4

根据C++标准:
运算符==和!=都会产生true或false的结果,即bool类型。
因此,1 == 2等于false,则你会得到:
false || 4

当4不等于0时,它被转换为布尔值true,因此整个条件表达式的结果为true


0

这不是C++中if语句的工作方式。如果你想知道某个东西是否等于一件事或另一件事,那么它就是

if (this == this_thing || this == another_thing)

你所拥有的

if(1 == 2 || 4)

被评估为

if ((1 == 2) || 4)
if (false || true)
if (true)

所以 if 语句将始终为真。


0

它的值为true,因为如果你检查一个整数的布尔值(就像你用数字4做的那样),它将被评估为true。正如上面的人所说,你必须把它分开。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接