Java的%运算符是否会溢出?

时间:2014-09-10 12:14:59

标签: java operators portability modulo strictfp

在C和C ++中,INT_MIN % -1的行为似乎是Shafik's post未定义/平台相关的。

在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

1 个答案:

答案 0 :(得分:6)

看看JLS section 15.17.3它说:

  

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

     

二进制后整数操作数的余数运算   数字促销(第5.5.2节)产生一个结果值   (a / b)* b +(a%b)等于a。这种身份即使在特殊情   被除数是最大可能的负整数的情况   其类型和除数的大小为-1(余数为0)。它   从这个规则可以看出,余数运算的结果可以   只有当股息为负时才是负数,并且只能是正数   如果股息为正;