gpt4 book ai didi

c - 在 C 中进行类型转换时的运算符优先级

转载 作者:太空狗 更新时间:2023-10-29 15:52:07 25 4
gpt4 key购买 nike

下面的代码给出了乘法的正确结果

int var0 = 245895;
int var1 = 478565

long long val = 0;

val = (long long) var0 * var1;

但是这篇文章给出了错误的结果:

int var0 = 245895;
int var1 = 478565
long long val = 0;

val = (long long) (var0 * var1);

谁能帮我看看为什么?

最佳答案

(long long) var0 * var1
~~~~~~~~~~~~~~~~
1
~~~~~~~~~~~~~~~~~~~~~~~
2

在上面的代码中,首先将var0转换为long long,然后乘法结果将计算为long long没有溢出。事实上,编译器将 var1 的类型从 int 隐式提升为 long long

(long long) (var0 * var1)
~~~~~~~~~~~~~
1
~~~~~~~~~~~~~~~~~~~~~~~~~
2

在第二个代码中,第一次乘法发生并且结果不适合 long 类型,因此之后的转换不再有帮助。它转换之前溢出的数字。

因此,在避免溢出方面,第一个优于第二个。

关于c - 在 C 中进行类型转换时的运算符优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28087339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com