C与Python - 条件语句中的运算符优先级

时间:2013-07-20 21:38:25

标签: c++ python c operator-precedence comparison-operators

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

2 个答案:

答案 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)

这是evaluated left to right

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)