在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
?
答案 0 :(得分:6)
看看JLS section 15.17.3它说:
在C和C ++中,余数运算符只接受整数操作数, 但在Java编程语言中,它也接受浮点数 操作数。
二进制后整数操作数的余数运算 数字促销(第5.5.2节)产生一个结果值 (a / b)* b +(a%b)等于a。这种身份即使在特殊情 被除数是最大可能的负整数的情况 其类型和除数的大小为-1(余数为0)。它 从这个规则可以看出,余数运算的结果可以 只有当股息为负时才是负数,并且只能是正数 如果股息为正;