是否有计算 Java int 溢出的公式?
示例:如果我将 1 添加到 Integer.MAX_VALUE;
,答案不是 2147483648,而是 -2147483648。
问题:如果我想计算对于大于 2^32 的值,Java 将打印什么,是否有简单的数学表达式(理论上的,而不是代码中的)?
最佳答案
((x + 231) 模 232) - 231
这是您要找的吗?这应该是在使用 32 位带符号 2 的补码整数的机器上任何数学运算的结果。也就是说,如果运算的数学值返回 x,则上述公式给出实际存储的整数(如果运算没有出错,并且不是“饱和”运算)。
请注意,我使用的是带有数学定义的“mod”,而不是 %
运算符在 Java 或 C 中的工作方式。也就是说,A mod B,其中 A 和 B 是整数, B > 0,总是返回 0 .. B-1 范围内的整数,例如(-1) mod 5 = 4。更具体地说,A mod B = A - B*floor(A/B)。
关于java - 计算 Java Int 溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23481107/