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

C vs. Python - operator precedence in conditional statements

本文关键字:运算符 优先级 语句 条件 vs Python      更新时间:2023-10-16

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

>=运算符从左到右计算,因此等于:

if( ( n >= 1 ) <= 10)
    printf("n is between 1 and 10n");

第一个( n >= 1 )的计算结果为真或假,等于 1 或 0。然后将结果 1 或 0 与始终计算结果为 true 的 result <= 10 进行比较。因此,将始终打印语句printf("n is between 1 and 10n");

它是这样从左到右计算的:

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)