我写了一段代码:
int a = 1000000000, b = 1000000000;
long long int ans = a * b;
cout << ans << '\n';此代码导致溢出。我知道a*b是造成问题的原因,但是我使用了长int变量来保持a*b。
int a = 1000000000, b = 1000000000;
long long int ans = (long long int)a * b;
cout << ans << '\n';它运转良好,没有溢出。在计算时,是否有临时变量来保存该值?请解释一下这个奇怪的溢出的原因。
发布于 2022-06-02 07:56:29
这使得有两个临时变量,(long long int)a和(long long int)b。第二个转换是隐式的。
如果硬件有32*32->64乘法,那么实际的编译器可能就不麻烦了,但是正式的转换必须发生。在64位硬件上,当您在64位寄存器中加载int时,它基本上是免费的。
https://stackoverflow.com/questions/72472550
复制相似问题