C++ 而循环不';我不能同时遵守这两个条件

C++ 而循环不';我不能同时遵守这两个条件,c++,while-loop,conditional-statements,C++,While Loop,Conditional Statements,这两个条件检查的不是同一件事吗 当nr1为1时,则nr2为2。所以当nr1!=lim1为false,则nr2!=lim2仍然为true,但由于整个表达式为false(因为逻辑AND),循环结束。这就是逻辑AND的工作原理,两个表达式都必须为真才能使整个表达式为真 不同循环中的两个条件是不相等的。说 while (!(nr1 == lim1 && nr2 == lim2)) { nr1--; nr2--; cout << nr1 << '

这两个条件检查的不是同一件事吗

nr1
1
时,则
nr2
2
。所以当
nr1!=lim1
为false,则
nr2!=lim2仍然为true,但由于整个表达式为false(因为逻辑AND),循环结束。这就是逻辑AND的工作原理,两个表达式都必须为真才能使整个表达式为真

不同循环中的两个条件是不相等的。说

while (!(nr1 == lim1 && nr2 == lim2)) 
{
    nr1--; nr2--;
    cout << nr1 << ' ' << nr2 << endl;
}
!(nr1 == lim1 || nr2 == lim2)
等于

nr1 != lim1 && nr2 != lim2
!(nr1 == lim1 && nr2 == lim2)
法律还规定

while (!(nr1 == lim1 && nr2 == lim2)) 
{
    nr1--; nr2--;
    cout << nr1 << ' ' << nr2 << endl;
}
!(nr1 == lim1 || nr2 == lim2)
等于

nr1 != lim1 && nr2 != lim2
!(nr1 == lim1 && nr2 == lim2)

您还应该注意,整数没有“无穷大”。所有整数都是有限的。在大多数系统中,
int
类型是一个32位有符号整数,这意味着它的范围约为20亿到-20亿。当一个有符号整数在上面或下面流动时,您将有未定义的行为


因此,无限循环的最终结果是未定义的行为。

nr1
1
时,则
nr2
2
。所以当
nr1!=lim1
为false,则
nr2!=lim2仍然为true,但由于整个表达式为false(因为逻辑AND),循环结束。这就是逻辑AND的工作原理,两个表达式都必须为真才能使整个表达式为真

不同循环中的两个条件是不相等的。说

while (!(nr1 == lim1 && nr2 == lim2)) 
{
    nr1--; nr2--;
    cout << nr1 << ' ' << nr2 << endl;
}
!(nr1 == lim1 || nr2 == lim2)
等于

nr1 != lim1 && nr2 != lim2
!(nr1 == lim1 && nr2 == lim2)
法律还规定

while (!(nr1 == lim1 && nr2 == lim2)) 
{
    nr1--; nr2--;
    cout << nr1 << ' ' << nr2 << endl;
}
!(nr1 == lim1 || nr2 == lim2)
等于

nr1 != lim1 && nr2 != lim2
!(nr1 == lim1 && nr2 == lim2)

您还应该注意,整数没有“无穷大”。所有整数都是有限的。在大多数系统中,
int
类型是一个32位有符号整数,这意味着它的范围约为20亿到-20亿。当一个有符号整数在上面或下面流动时,您将有未定义的行为


因此,无限循环的最终结果是未定义的行为。

有一个简单的数学公式,叫做德摩根公式,它说

在C++中,用!表示为$$,表示为| |。因此,必须将表达式转换为以下形式
!(nr1==lim1 | | nr2==lim2)与(nr1!=lim1&&nr2!=lim2)相等有一个简单的数学公式,叫做德摩根公式

在C++中,用!表示为$$,表示为| |。因此,必须将表达式转换为以下形式
!(nr1==lim1 | | nr2==lim2)与(nr1!=lim1&&nr2!=lim2)相等

弗斯特
while(nr1!=lim1&&nr2!=lim2)
可以翻译成英语,只要nr1和lim1不同,nr2和lim2不同,就可以保持循环

第二
而(!(nr1==lim1和&nr2==lim2))
可以翻译成英语,只要nr1和nr2分别不等于lim1和lim2,就可以保持循环


代码不能完全按照您的要求执行,因为nr1和nr2被设置为6和7。这意味着在第一个while循环中,nr1将首先到达1,因此将中断循环。相反,对于第二个条件,它将始终计算为真,因为nr1和nr2不可能同时分别等于lim1和lim2,因为nr1和nr2之间的差值为1。

实际上这两个条件都做了它们应该做的事情,所以让我们将它们分解

nr1 != lim1 || nr2 != lim2
弗斯特
while(nr1!=lim1&&nr2!=lim2)
可以翻译成英语,只要nr1和lim1不同,nr2和lim2不同,就可以保持循环

第二
而(!(nr1==lim1和&nr2==lim2))
可以翻译成英语,只要nr1和nr2分别不等于lim1和lim2,就可以保持循环

代码不能完全按照您的要求执行,因为nr1和nr2被设置为6和7。这意味着在第一个while循环中,nr1将首先到达1,因此将中断循环。相反,对于第二个条件,它将始终计算为真,因为nr1和nr2不可能同时分别等于lim1和lim2,因为nr1和nr2之间的差值为1

nr1 != lim1 || nr2 != lim2
如果以下两种情况都存在,则此语句为
true

  • nr1
    不同于
    lim1
  • nr2
    lim2
因此,如果至少有一个条件未满足,程序将停止迭代


仅当两个条件都满足时,此语句才为
true
。因此,如果至少有一个条件未满足,则语句将变为
false

nr1 == lim1 && nr2 == lim2
所以现在如果你颠倒语句,这意味着如果语句是
false
,它将是
true
。因此,在这个条件下,您告诉您的程序:“只要至少有一个条件不满足,就继续迭代”。换句话说,您的程序将迭代,直到满足这两个条件

如果以下两种情况都存在,则此语句为
true

  • nr1
    不同于
    lim1
  • nr2
    lim2
因此,如果至少有一个条件未满足,程序将停止迭代


仅当两个条件都满足时,此语句才为
true
。因此,如果至少有一个条件未满足,则语句将变为
false

nr1 == lim1 && nr2 == lim2

所以现在如果你颠倒语句,这意味着如果语句是
false
,它将是
true
。因此,在这个条件下,您告诉您的程序:“只要至少有一个条件不满足,就继续迭代”。换句话说,你的程序将迭代直到两个条件都满足

我昨天花了一整天的时间试图弄清楚,但我就是搞不清楚。可能重复@Someprogrammerdude是的,它不应该停止,因为不是两个数字都是1。其中只有一个是。它应该