任何人都可以阐明为什么j仍然保持负值。Integer.MIN_VAL仍显示负值
int i=Integer.MIN_VALUE;
System.out.println(i); //output, -2147483648
int j=-i;
System.out.println(j); // output, -2147483648
任何人都可以阐明为什么j仍然保持负值。Integer.MIN_VAL仍显示负值
int i=Integer.MIN_VALUE;
System.out.println(i); //output, -2147483648
int j=-i;
System.out.println(j); // output, -2147483648
Integer.MIN_VALUE = -2147483648
Integer.MAX_VALUE = 2147483647
因此,如果您切换MIN_VALUE
的符号,你应该得到2147483648这是一个溢出。
Integer.MIN_VALUE是-2 (0x80000000
)和Integer.MAX_VALUE的是2 -1(0x7fffffff
)。
如果您否定Integer.MIN_VALUE,您将得到2 ,这比Integer.MAX_VALUE多1,因此它不适合。超出最大值后,它会变成负值。
计算机计算值为a
的否定如下:NOT(a) + 1
。 所以,让我们说,我们要通过否定1
计算-1
:
0x00000001
,0xffffffe
0xffffffff
。,并反向,否定-1:
0xffffffff
0x00000000
0x00000001
类似地,否定-2 :
0x80000000
0x7fffffff
(Integer.MAX_VALUE的)0x80000000
(Integer.MIN_VALUE的)
请与您所使用的语言添加一个标签(单击 “编辑”,在问题的底部)。 – kebs
因为JAVA的'Integer.MAX_VALUE'是'2147483647'。为什么它回退到MIN_VALUE我不知道。也许有些JAVA大师会解释这一点。 –