C如何处理条件语句,例如n >= 1 <= 10?
我最初认为它会被评估为n >= 1 && 1 <= 10,因为它将在 Python 中被评估。由于1 <= 10始终为真,因此 的第二部分and是多余的( 的布尔值X && True等同于 的布尔值X)。
但是,当我使用 运行它时n=0,条件被评估为真。事实上,条件似乎总是评估为真。
这是我正在查看的示例:
if (n >= 1 <= 10)
printf("n is between 1 and 10\n");
C如何处理条件语句,例如n >= 1 <= 10?
我最初认为它会被评估为n >= 1 && 1 <= 10,因为它将在 Python 中被评估。由于1 <= 10始终为真,因此 的第二部分and是多余的( 的布尔值X && True等同于 的布尔值X)。
但是,当我使用 运行它时n=0,条件被评估为真。事实上,条件似乎总是评估为真。
这是我正在查看的示例:
if (n >= 1 <= 10)
printf("n is between 1 and 10\n");
>=运算符从左到右求值,所以它等于:
if( ( n >= 1 ) <= 10)
printf("n is between 1 and 10\n");
第一个( n >= 1 )被评估为真或假,等于 1 或 0。然后将 1 或 0 的结果与之进行比较,result <= 10结果将始终评估为真。因此该语句printf("n is between 1 and 10\n");将始终被打印
它从左到右评估如下:
n = 5;
if (n >= 1 <= 10)
// then
if (1 <= 10)
// then
if (1)
它首先检查是否n >= 1. 如果是,则评估为1,否则为0。这导致下一个评估,1 <= 10,它也评估1为。请注意,这也会成功:
n = 5;
if (n >= 3 == 1)
因为它是这样评估的:
n = 5;
if (n >= 3 == 1) // but you should never write code like this
// then
if (1 == 1)
// then
if (1)
另请注意为什么它适用于n = 0
n = 0;
if (n >= 1 <= 10)
// then
if (0 <= 10) // 0 isn't greater or equal to 1, so 0 (false) is "returned"
// then
if (1) // but 0 is less than or equal to 10, so it evaluates as 1 (true)