溢出长长乘法
考虑以下代码:
long long int n = 2000*2000*2000*2000; // overflow
为什么这段代码会导致溢出当乘以整数常量并将结果分配给 long long 时变量?
与以下可行的方法相比:
long long int n = pow(2000,4); // works long long int n = 16000000000000; // works
C 中的整数文字具有取决于其值的默认类型。在这种情况下,2000 可以容纳 int 变量,该变量通常是 32 位类型。
使用较大类型的操作数执行算术运算,但不能小于 int。因此,在第一种情况下,乘法是作为 int*int 执行的,得到一个 int 结果。
出现问题是因为 int 结果可能会溢出,但代码试图将其存储在一个 long long 变量中。 C 不会根据目标推断类型,因此赋值不会防止溢出。
要避免此问题,您可以在将它们相乘之前将整数文字显式转换为 long long:
long long int n = (long long int)2000*2000*2000*2000;
以上是为什么即使分配给'long long”变量,乘法整数常量也会溢出?的详细内容。更多信息请关注PHP中文网其他相关文章!