Pac*_*ier 3 java portability operators modulo strictfp
在C和C++中,INT_MIN % -1根据Shafik的帖子,行为 似乎是未定义/平台依赖的.
在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);
}
}
Run Code Online (Sandbox Code Playgroud)
上述结果是否存在独立于平台的保证0?
看看JLS第15.17.3节,它说:
在C和C++中,余数运算符只接受整数操作数,但在Java编程语言中,它也接受浮点操作数.
二进制数字提升(第5.6.2节)后整数操作数的余数运算产生一个结果值,使得(a/b)*b +(a%b)等于a.即使在特殊情况下,这种同一性仍然存在,即被除数是其类型的最大可能量值的负整数,且除数为-1(余数为0).根据这个规则可以得出,只有当被除数为负时,余数运算的结果才是负数,只有当被除数为正时才能为正;
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |