For 循环中的逻辑异或与条件逻辑或
Logical Exclusive OR's vs Conditional Logical OR's Within An For Loop
最近我一直在做一个需要循环 运行 x 次的项目。只是想排除某些输出 x
值。
下面是我认为可行的示例:
// Create a 1-58 Loop
for (int n = 1; n < 59; n++)
{
// Exclude Values
if (n != 2 || n != 11 || n != 16 || n != 40)
{
// Display Data
Console.WriteLine(n);
}
}
操作n != 2 || n != 11 || n != 16 || n != 40
在任何正常情况下都会排除不等于!=
值x
的值。然而,这不起作用并且仍然呈现所有值并在引入 or 语句 ||
后忽略操作。
下面是我玩了一会儿后找到的解决方案:
// Create a 1-58 Loop
for (int n = 1; n < 59; n++)
{
// Exclude Values
if (n == 2 ^ n == 11 ^ n != 16 ^ n == 40)
{
// Display Data
Console.WriteLine(n);
}
}
所以我的问题是为什么逻辑独占 ||
在 for 循环中不起作用,而条件逻辑 ^
却可以?我正在从 this wiki 中提取我的信息。如果我有什么不对的地方,请毫不犹豫地纠正我!
if (n != 2 || n != 11 || n != 16 || n != 40)
这在 2 上是正确的。因为 2 不是 11。
如果你想排除那些。你应该这样做:
if (n != 2 && n != 11 && n != 16 && n != 40)
^
就是logical exclusive OR, while ||
is the conditional logical OR。 Exclusive OR 与 OR 的不同之处在于,Exclusive OR 要求 一个且只有一个 条件的计算结果为 true
,而条件 OR 也将 return true
if both 条件评估为 true
.
另请注意,一旦任何条件的计算结果为 true
(从左到右计算),条件 OR (||
) 将 return;没有其他条件被评估,因为它们不会影响结果(这使得它不同于 |
运算符,其中所有条件都被评估)。
让我们看一下有效的语句:
if (n == 2 ^ n == 11 ^ n != 16 ^ n == 40)
如果我们将其分解为要排除的值之一,例如 2
,我们有:
if (true ^ false ^ true ^ false) =>
\ / / /
\ / / /
if ( true ^ true ^ false ) =>
\ / /
\ / /
if ( false ^ false ) =>
\ /
\ /
if ( false )
然后让我们看看不的条件,现在我们明白为什么了:
if (n != 2 || n != 11 || n != 16 || n != 40)
对于数字 2
,这变成:
if (false || true || true || true)
\ /
\ /
if ( true ) // evaluation stops at the first `true` result
那么在这种情况下我们还能做什么呢?好吧,我们可以将 ||
运算符与 &&
运算符(即 conditional logical AND 运算符)交换,只有 returns true
如果 两个条件评估为true
(如果任何条件returns false
,它也会短路,因为不需要进一步评估)。
一起来看看:
if (n != 2 && n != 11 && n != 16 && n != 40)
对于数字 2
,这变成:
if (false && true && true && true)
\ /
\ /
if ( false ) // evaluation stops at the first `false` result
最近我一直在做一个需要循环 运行 x 次的项目。只是想排除某些输出 x
值。
下面是我认为可行的示例:
// Create a 1-58 Loop
for (int n = 1; n < 59; n++)
{
// Exclude Values
if (n != 2 || n != 11 || n != 16 || n != 40)
{
// Display Data
Console.WriteLine(n);
}
}
操作n != 2 || n != 11 || n != 16 || n != 40
在任何正常情况下都会排除不等于!=
值x
的值。然而,这不起作用并且仍然呈现所有值并在引入 or 语句 ||
后忽略操作。
下面是我玩了一会儿后找到的解决方案:
// Create a 1-58 Loop
for (int n = 1; n < 59; n++)
{
// Exclude Values
if (n == 2 ^ n == 11 ^ n != 16 ^ n == 40)
{
// Display Data
Console.WriteLine(n);
}
}
所以我的问题是为什么逻辑独占 ||
在 for 循环中不起作用,而条件逻辑 ^
却可以?我正在从 this wiki 中提取我的信息。如果我有什么不对的地方,请毫不犹豫地纠正我!
if (n != 2 || n != 11 || n != 16 || n != 40)
这在 2 上是正确的。因为 2 不是 11。
如果你想排除那些。你应该这样做:
if (n != 2 && n != 11 && n != 16 && n != 40)
^
就是logical exclusive OR, while ||
is the conditional logical OR。 Exclusive OR 与 OR 的不同之处在于,Exclusive OR 要求 一个且只有一个 条件的计算结果为 true
,而条件 OR 也将 return true
if both 条件评估为 true
.
另请注意,一旦任何条件的计算结果为 true
(从左到右计算),条件 OR (||
) 将 return;没有其他条件被评估,因为它们不会影响结果(这使得它不同于 |
运算符,其中所有条件都被评估)。
让我们看一下有效的语句:
if (n == 2 ^ n == 11 ^ n != 16 ^ n == 40)
如果我们将其分解为要排除的值之一,例如 2
,我们有:
if (true ^ false ^ true ^ false) =>
\ / / /
\ / / /
if ( true ^ true ^ false ) =>
\ / /
\ / /
if ( false ^ false ) =>
\ /
\ /
if ( false )
然后让我们看看不的条件,现在我们明白为什么了:
if (n != 2 || n != 11 || n != 16 || n != 40)
对于数字 2
,这变成:
if (false || true || true || true)
\ /
\ /
if ( true ) // evaluation stops at the first `true` result
那么在这种情况下我们还能做什么呢?好吧,我们可以将 ||
运算符与 &&
运算符(即 conditional logical AND 运算符)交换,只有 returns true
如果 两个条件评估为true
(如果任何条件returns false
,它也会短路,因为不需要进一步评估)。
一起来看看:
if (n != 2 && n != 11 && n != 16 && n != 40)
对于数字 2
,这变成:
if (false && true && true && true)
\ /
\ /
if ( false ) // evaluation stops at the first `false` result