计算 Java Int 溢出

Jak*_*san 1 java math expression integer-overflow

有没有一个公式可以计算 Java int 的溢出情况?

示例:如果我加 1,则Integer.MAX_VALUE;答案不是 2147483648,而是 -2147483648。

问题:如果我想计算 Java 将打印大于 2^32 的值,是否有一个简单的数学表达式(理论上的,而不是代码中的)?

ajb*_*ajb 5

((x + 2 31 ) 模 2 32 ) - 2 31

这是您要找的吗?这应该是使用 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)。