【发布时间】:2017-10-14 13:30:01
【问题描述】:
int a = Integer.MIN_VALUE;
int b = -a;
System.out.println("a = "+a + " | b = "+b);
结果:
a = -2147483648 | b = -2147483648
我希望 b 是一个正数。
【问题讨论】:
-
因为最大正数小一。它考虑了 0,并且正数和负数一样多
-
一个整数的最大值是 2147483647,所以它会循环回到最小值。如果您将 1 添加到
a之前,它应该可以工作,然后将值分配给b。 -
这是一个二进制补码的怪癖,基本上。考虑
byte类型,其值从-128 到127...如果您有一个字节x的值为-128,那么-x的值是多少? -
每个程序员都必须知道补码算法。此外,文档中还介绍了数字类型的格式和范围。
-
如果您期望
b是一个正数,什么您期望的正数,以及 为什么您期望它,给定Integer.MAX_VALUE是 2147483647?
标签: java