尤达条件和整数提升

发布于 2024-09-24 06:21:01 字数 276 浏览 6 评论 0原文

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

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

或者应该是:

if (-1 == i)

是否存在任何情况与 -1LL 的比较不同(其中 int64_tlong long)?

When comparing a type larger than int, with an integer constant, should I place the constant on the left or the right to ensure the correct comparison is performed?

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

or should it be:

if (-1 == i)

Are there any circumstances in which either case is not identical to comparison with -1LL (where int64_t is long long)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

给我一枪 2024-10-01 06:21:01

无论您将其放在右侧还是左侧,都没有关系; == 运算符是完全对称的。

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

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

因此 -1 被转换为 int64_t-1LL 没有区别。

It doesn't matter whether you put it on the right hand side or the left hand side; the == operator is completely symmetrical.

If both operands to the == operator have arithmetic type, as in this case, then the "usual arithmetic conversions" are applied (C99 §6.5.9). In this case, the rule that applies is:

If both operands have signed integer types or both have unsigned
integer types, the operand with the type of lesser integer conversion rank is
converted to the type of the operand with greater rank. (C99 §6.3.1.8)

So the -1 is converted to int64_t. -1LL makes no difference.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文