这段代码:

System.out.println(Math.abs(Integer.MIN_VALUE));

返回-2147483648
它不应该将绝对值返回为2147483648吗?

最佳答案

Integer.MIN_VALUE-2147483648,但是32位整数可以包含的最大值是+2147483647。尝试以32位int表示+2147483648将有效地“翻转”到-2147483648。这是因为,当使用带符号整数时,+2147483648-2147483648的二进制补码二进制表示形式是相同的。但是,这不是问题,因为+2147483648被认为超出范围。

有关此问题的更多信息,您可能需要查看Wikipedia article on Two's complement

关于java - Math.abs为Integer.Min_VALUE返回错误的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5444611/

10-10 21:39