C如何处理n >= 1 <= 10
等条件语句?
我最初认为它将被评估为n >= 1 && 1 <= 10
,因为它将在Python中进行评估。由于1 <= 10
始终为真,因此and
的第二个部分是冗余的(X && True
的布尔值等于X
的布尔值)。
但是,当我使用n=0
运行它时,条件会被评估为true。事实上,条件总是似乎评估为真。
这是我看到的例子:
if (n >= 1 <= 10)
printf("n is between 1 and 10\n");
答案 0 :(得分:10)
>=
运算符从左到右进行求值,因此它等于:
if( ( n >= 1 ) <= 10)
printf("n is between 1 and 10\n");
第一个( n >= 1 )
被评估为true或false,等于1或0.然后将1或0的结果与result <= 10
进行比较,printf("n is between 1 and 10\n");
将始终求值为true。
因此,语句{{1}}将始终打印
答案 1 :(得分:4)
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)