1

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");
4

2 回答 2

11

>=运算符从左到右求值,所以它等于:

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");将始终被打印

于 2013-07-20T21:43:50.477 回答
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)
于 2013-07-20T21:43:10.090 回答