尤达条件和整数推广

时间:2010-09-21 06:57:14

标签: c integer-promotion

当比较大于int的类型和整数常量时,我​​应该将常量放在左侧还是右侧以确保执行正确的比较?

int64_t i = some_val;
if (i == -1)

或应该是:

if (-1 == i)

在任何情况下,这两种情况与-1LL(其中int64_tlong long)的比较都不相同吗?

1 个答案:

答案 0 :(得分:11)

无论是放在右手边还是左手边都没关系; ==运算符是完全对称的。

如果==运算符的两个操作数都具有算术类型(如本例所示),则应用“通常的算术转换”(C99§6.5.9)。在这种情况下,适用的规则是:

  

如果两个操作数都有有符号整数类型或两者都有无符号   整数类型,具有较小整数转换等级类型的操作数是   转换为具有更高等级的操作数的类型。 (C99§6.3.1.8)

所以-1转换为int64_t-1LL没有任何区别。