如果我做
int n = 100000;
long long x = n * n;
Run Code Online (Sandbox Code Playgroud)
然后 x == 1410065408
1410065408是2 ^ 31,但我希望x为64位
到底是怎么回事?我正在使用VSC++(默认VS c ++编译器)
Jos*_*ron 22
n*n太大了,int因为它等于10^10.(错误的)结果存储为a long long.
尝试:
long long n = 100000;
long long x = n*n;
Run Code Online (Sandbox Code Playgroud)
这是一个引用标准的答案,该标准指定操作long long x = (long long)n*nwhere nint是不会导致数据丢失的.特别,
如果两个操作数都具有有符号整数类型或两者都具有无符号整数类型,则具有较小整数转换等级类型的操作数应转换为具有较高等级的操作数的类型.
由于功能强制转换在此处具有最高优先级,因此它将左被乘数转换为a long long.右类型的被乘数根据标准int转换为a long long.没有损失发生.