JAVA int是-2147483648时,Math.abs()无法将其转成正数,为什么?
超出int的数值长度范围,可以现将int数据转为Long,然后再取abs()值
看一下是不是int 最大值、最小值越界了?
int 最大值是2147483648
2147483648-1
用long或者uint才可以。
在JAVA中int的带符号正数的最大值=最小值的绝对值-1,故对int的最小值(你所说的这个值是int的带符号的最小值)取绝对值是无法表示出来的,
可以扩展类型,使用长整型或者无符号整数存储,然后在利用其他方法转
java中的int类型存储长度为32bit.所以范围是“-2^32”到“2^32-1”;
也就是“-2147483648”到“2147483647”;
-2147483648 绝对值 就是2147483648 >2147483647 ,超出范围了
就是超出范围的原因,你可以Math.abs(Long.valueOf(Integer.MIN_VALUE))
int是有最大值的 最大值是2147483648
你可以查看一下int的最大值,看看是不是超出范围了
你说的应该是8字节长度的int(记得不太清楚了).
其范围应该是-2147483648到2147483647。比上限2147483647比下限-2147483648的相反数少1.所以应该是转换成功了,但是因为上限超过了一个二进制位,所以又变为下限了。
不知道描述是否清楚。
超出范围了啊,int也是有大小上限的
计算机中有符号数字,首位表示符号位,
如果正数首位是0,后边就用二进制表示,例如 1: 0000 0001
如果是负数首位为-1,后边就是人进制数取反后+1, 例如-1: 不取反的话是: 1000 0001,然后取反后+1为1111 1111
在负数的绝对值计算时候,是整个数字全部取反+1,-1的数字全部取反就是0000 0000,后在加1为 0000 0001(1)
所以-2147483648在计算机中表示为: 1000 0000 0000 0000 0000 0000 0000 0000,
在进行绝对值计算的时候先取反 0111 1111 1111 1111 1111 1111 1111 1111,
后在加1为 1000 0000 0000 0000 0000 0000 0000 0000,在有符号的就又变为了-2147483648