C vs. Python - 条件语句中的运算符优先级
C vs. Python - operator precedence in conditional statements
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)
相关文章:
- C++ 带有函数指针的运算符优先级
- <<运算符优先级与字符串比较
- 在一个指令中声明更多指针的运算符优先级
- C++中的运算符优先级
- c++中的增量和三元运算符优先级
- 涉及模运算符优先级的错误以及C++中具有大数字的括号
- 带有 cout 和指针的运算符优先级
- C++ 使用矢量迭代器时的运算符优先级
- 序列点和运算符优先级有什么区别
- 运算符优先级 括号问题
- C++表达式中的运算符优先级
- 相等运算符优先级不起作用
- 递增和按位移位运算符优先级?
- 运算符优先级超载在C 中
- C++ 中的递增/递减和输出流运算符优先级
- 输出流中的运算符优先级C++
- 运算符优先级C++
- C++11 何时相对于运算符优先级进行算术类型转换
- 从表中了解运算符优先级
- 是否违反 C/C++ 运算符优先级和关联性规则?