Long Long Int 赋值中的溢出:为什么整数文字相乘失败
在提供的代码片段中,尝试了三个 long long 整数赋值:
long long int n = 2000*2000*2000*2000; // overflow long long int n = pow(2000,4); // works long long int n = 16000000000000; // works
虽然第三个赋值成功,但为什么第一个赋值尽管使用了 long long int 还是会溢出?
理解整数类型
溢出的原因在于整数类型的本质。默认情况下,整数文字被分配可以表示其值的最小类型,但不小于 int。在给定的情况下,2000 是一个 int,在大多数系统上通常占用 32 位。
乘法规则
算术运算符(例如乘法)通过所涉及的两种类型中较大的一个,但不小于 int。例如:
但是,int * int 仍然调用operator*(int,int) -> int.
类型提升和溢出
在溢出赋值中,2000*2000*2000*2000 涉及到 4 个 int 值相乘,得到一个比 int 更大的整数可以持有。尽管最终结果存储在 long long int 变量中,但乘法是用整数进行的。
解决溢出
为了避免溢出,可以使用以下方法方法:
以上是为什么在“long long int”赋值中乘以整数文字会导致溢出?的详细内容。更多信息请关注PHP中文网其他相关文章!