繁体   English   中英

long long int ans = a*b VS long long int ans = (long long int) a*b

[英]long long int ans = a*b VS long long int ans = (long long int) a*b

我写了一段代码:

int a = 1000000000, b = 1000000000;
long long int ans = a * b;
cout << ans << '\n';

此代码导致溢出。 我知道 a * b 是导致问题的原因,但我花了 long long int 变量来保留 a * b。 但是看看下面的代码:

int a = 1000000000, b = 1000000000;
long long int ans = (long long int)a * b;
cout << ans << '\n';

它工作正常,不会溢出。 计算时是否有任何临时变量来保存该值? 请解释这种奇怪的溢出背后的原因。

这产生了两个临时变量, (long long int)a(long long int)b 第二个转换是隐式的。

如果硬件具有 32*32->64 乘法,实际的编译器可能不会打扰,但必须进行正式的转换。 在 64 位硬件上,当您在 64 位寄存器中加载int时,它基本上是免费的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM