为什么在这里需要显式的类型转换?

时间:2019-06-21 06:46:15

标签: c++ typecasting-operator

为什么我们显式地需要将int转换为long long

t=(long long)n*(long long)n给出正确答案,但 t=n*n给出了错误的答案:

#include <iostream>
using namespace std;

int main() {
int n=100000;
long long int t;
t=(long long)n*(long long)n;
//t=n*n  (This gives wrong answer)
printf("%lld",t);
return 0;
}

t=(long long)n*(long long)n给出10000000000 在哪里 t=n*n给出1410065408 为什么会这样?

1 个答案:

答案 0 :(得分:4)

因为nint类型,所以n * n也是int类型。 C ++中没有“动态扩展”。

写入1LL * n * n会强制将n转换为long long类型。

最后,请注意,即使100000 对于int-std::numeric_limits<int>::max()来说也可能太大,也可能小到32767。如果您想让代码要是便携式,您需要编写long n = 100000;和给定t的表达式。