为什么关系运算符意思相同时结果不同?
Why does results are different when relational operators means the same?
为了清楚起见,让我们考虑以下程序:
#include <iostream>
int main(void) {
short int i; // declaration
short int value;
short int sum;
i = value = sum = 0; // initialization
std::cout << "Enter a value: ";
std::cin >> value;
while (i != value) { // ### here's the confusion ###
sum += i;
i++;
}
std::cout << "Total sum: " << sum << std::endl;
return 0;
}
看while (i != value)
,当给出这个表达式时,结果显示Total sum: 45
,而如果我们输入while (i <= value)
,结果显示Total sum: 55
。 (例如输入 10
)
这里,疑惑的是,什么时候在循环中使用!=
和<=
或>=
操作,有什么具体的条件吗?
根据TutorialsPoint's Operators Reference
- 表示
!=
(当两个操作数不相等时使用returns true
)。
<=
(returns true
当我们需要确保第一个操作数是否小于或等于第二个时使用。
预计输出没有差异,但有些地方被误解了。
与
while( i <= value)
最后一次迭代是 i == value
。有
while ( i != value)
循环体在i == value
时不会执行。这就是您观察到差异的原因。
这是学习如何使用调试器的好机会。 And/Or 意识到你的例子已经太复杂了,无法直接看到发生了什么。使用
你会更容易发现差异
int i = 0;
int value = 5;
while ( i != value) {
std::cout << i << " ";
}
i = 0;
while ( i <= value) {
std::cout << i << " ";
}
这个while循环
while (i != value)
不包括 i 等于 value 时的迭代,因为在这种情况下,条件 i != value 的计算结果为 false。
这个while循环
while (i <= value)
包括 i 等于 value 时的迭代,因为在这种情况下,条件 i <= value 的计算结果为真。
其实第一个条件可以改写成下面的方式(前提是一开始i小于value)
while ( i < value )
现在将其与第二个循环中的条件进行比较,后者又可以重写为
while ( i < value || i == value )
那就是你有两个不同的条件。
为了清楚起见,让我们考虑以下程序:
#include <iostream>
int main(void) {
short int i; // declaration
short int value;
short int sum;
i = value = sum = 0; // initialization
std::cout << "Enter a value: ";
std::cin >> value;
while (i != value) { // ### here's the confusion ###
sum += i;
i++;
}
std::cout << "Total sum: " << sum << std::endl;
return 0;
}
看while (i != value)
,当给出这个表达式时,结果显示Total sum: 45
,而如果我们输入while (i <= value)
,结果显示Total sum: 55
。 (例如输入 10
)
这里,疑惑的是,什么时候在循环中使用!=
和<=
或>=
操作,有什么具体的条件吗?
根据TutorialsPoint's Operators Reference
- 表示
!=
(当两个操作数不相等时使用returnstrue
)。 <=
(returnstrue
当我们需要确保第一个操作数是否小于或等于第二个时使用。
预计输出没有差异,但有些地方被误解了。
与
while( i <= value)
最后一次迭代是 i == value
。有
while ( i != value)
循环体在i == value
时不会执行。这就是您观察到差异的原因。
这是学习如何使用调试器的好机会。 And/Or 意识到你的例子已经太复杂了,无法直接看到发生了什么。使用
你会更容易发现差异int i = 0;
int value = 5;
while ( i != value) {
std::cout << i << " ";
}
i = 0;
while ( i <= value) {
std::cout << i << " ";
}
这个while循环
while (i != value)
不包括 i 等于 value 时的迭代,因为在这种情况下,条件 i != value 的计算结果为 false。
这个while循环
while (i <= value)
包括 i 等于 value 时的迭代,因为在这种情况下,条件 i <= value 的计算结果为真。
其实第一个条件可以改写成下面的方式(前提是一开始i小于value)
while ( i < value )
现在将其与第二个循环中的条件进行比较,后者又可以重写为
while ( i < value || i == value )
那就是你有两个不同的条件。