#include <iostream>
int main()
{
int number=65536;
long long temp=number*number;
std::cout << temp << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
广场65536明显超出了int范围.现在,如果我宣布temp为int,我会理解为什么这会失败.但即便如此long long,输出总是如此0.我相信这与隐式类型转换有些相关,但我不明白为什么结果如此0.
这是因为c ++根本不允许转换int为long?如果是这样,为什么这个数字较小?
Bat*_*eba 10
(注意,a的范围int可以小到-32767到+32767.)
number * numberint由于两个参数都是类型,因此在算术中进行计算int.由于您的溢出,您的程序的行为是不确定的int.
您想要将结果分配给a的事实long long是不相关的.
一种解决方案是写入1LL * number * number强制推广long long类型的参数.
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |