3

根据Shafik 的帖子,在 C 和 C++ 中, 的行为 INT_MIN % -1似乎是未定义的/平台相关的。

在 Java 中,% 运算符是否会溢出?

考虑这段代码:

public class Test {
    public static void main(String[] args) {
        // setup variables:
        byte b = Byte.MIN_VALUE % (-1);
        short s = Short.MIN_VALUE % (-1);
        int i = Integer.MIN_VALUE % (-1);
        long l = Long.MIN_VALUE % (-1);

        // my machine prints "0" for all:
        System.out.println(b);
        System.out.println(s);
        System.out.println(i);
        System.out.println(l);
    }
}

上述结果是否有独立于平台的保证0

4

1 回答 1

6

查看JLS 第 15.17.3 节,它说:

在 C 和 C++ 中,余数运算符只接受整数操作数,但在 Java 编程语言中,它也接受浮点操作数。

在二进制数值提升(第 5.6.2 节)之后,整数操作数的余数运算产生一个结果值,使得 (a/b)*b+(a%b) 等于 a。即使在被除数是其类型的最大可能量级的负整数并且除数是-1(余数是0)的特殊情况下,这个恒等式也成立。由这个规则得出,余数运算的结果只有当被除数为负时才能为负,只有当被除数为正时才能为正;

于 2014-09-10T12:29:13.180 回答