这些值如何在java中相同?
-Integer.MIN_VALUE == Integer.MIN_VALUE
Run Code Online (Sandbox Code Playgroud)
价值观是:
-2147483648 : -2147483648
Run Code Online (Sandbox Code Playgroud)
我试着比较它并返回真实[惊人!]
是的,这是预期的行为.范围int
是-2147483648到+2147483647.
从JLS第15.15.4节(强调我的):
对于整数值,否定与从零减去相同.Java编程语言对整数使用二进制补码表示,并且二进制补码值的范围不对称,因此否定最大负数
int
或long
导致相同的最大负数.在这种情况下会发生溢出,但不会抛出异常.对于所有整数值x
,-x
等于(~x)+1
.
~Integer.MIN_VALUE
是Integer.MAX_VALUE
...当你加一个,它就会溢出来Integer.MIN_VALUE
.
这就是为什么当你实现一个反转比较器时,你不能这样做:
// BAD CODE!
public int compare(T x, T y) {
return -originalComparator.compare(x, y);
}
Run Code Online (Sandbox Code Playgroud)
相反,使用这个:
// This is fine, assuming the comparator obeys its contract
public int compare(T x, T y) {
return originalComparator.compare(y, x));
}
Run Code Online (Sandbox Code Playgroud)
看下面的代码:
System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.MAX_VALUE);
System.out.println(-Integer.MIN_VALUE);
Run Code Online (Sandbox Code Playgroud)
为整数的最小值为-2147483648,当你需要否定为此,变得 2147483648,这是1大于Integer.MAX_VALUE
,使其熄灭的范围内,并且朝向另一端移动,并成为 -2147483648
归档时间: |
|
查看次数: |
166 次 |
最近记录: |