Math.abs为Integer.Min_VALUE返回错误的值 这段代码:

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

回报-2147483648这难道不应该返回绝对值2147483648

-------------------------------------------------------------------------------------------------------------------------

1. Integer.MIN_VALUE-2147483648的,但一个32位整数可以包含最高值是+2147483647。试图代表+2147483648在32位int将有效地“翻转”到-2147483648。这是有符号整数,两个的二进制表示+2147483648-2147483648是相同的。这一点,也没有问题,但如+2147483648被认为是超出范围。 对于在这个问题上多一点读书,你可能要检查出两个的维基百科的文章
2. 下面是Java的医生说的Math.abs()
3. 你指出的行为确实,反直觉的。但是,此行为是由javadoc文档中指定的Math.abs(int):如果不是负数,则返回。 如果是负的,否定的,则返回。即,Math.abs(int)应该像下面的Java代码:

public static int abs(int x){if (x >= 0) {return x;}return -x;
}

也就是说,在否定的情况下,-x。 按照JLS的第15.15.4中,-x等于(~x)+1,其中~是位运算符。 要检查这是否听起来很正确,让我们-1为例。 整数值-1是可记为0xFFFFFFFF在十六进制中的Java(看看这个用println或任何拍摄-(-1)给出:

-(-1) = (~(0xFFFFFFFF)) + 1 = 0x00000000 + 1 = 0x00000001 = 1

因此,它的工作原理。 现在尝试用Integer.MIN_VALUE。知道的最低整数可以表示为0x80000000,即,优先位设置为1,并设置为0的31个剩余比特,我们有:

-(Integer.MIN_VALUE) = (~(0x80000000)) + 1 = 0x7FFFFFFF + 1 = 0x80000000 = Integer.MIN_VALUE

这就是为什么Math.abs(Integer.MIN_VALUE)回报Integer.MIN_VALUE。还要注意的是0x7FFFFFFFInteger.MAX_VALUE。 这就是说,我们如何才能避免出现问题,由于在未来的这个反直觉的返回值?我们可以,正如,铸就我们ints到long之前。然而,我们必须要么赶逐回ints,这不工作Integer.MIN_VALUE == (int) Math.abs((long)Integer.MIN_VALUE)。 或继续long•本希望我们永远不会调用Math.abs(long)用一个值等于Long.MIN_VALUE,因为我们也有Math.abs(Long.MIN_VALUE) == Long.MIN_VALUE。我们BigInteger到处都是,BigInteger.abs()确实总是返回一个正值。这是一个很好的选择,硬朗的操控比原始整数类型有点慢。 我们可以写我们自己的包装器Math.abs(int),像这样:

/*** Fail-fast wrapper for {@link Math#abs(int)}* @param x* @return the absolute value of x* @throws ArithmeticException when a negative value would have been returned by {@link Math#abs(int)}*/
public static int abs(int x) throws ArithmeticException {if (x == Integer.MIN_VALUE) {// fail instead of returning Integer.MAX_VALUE// to prevent the occurrence of incorrect results in later computationsthrow new ArithmeticException("Math.abs(Integer.MIN_VALUE)");}return Math.abs(x);
}

作为最后一点,这个问题似乎是众所周知的见,例如有关相应的FindBugs规则此项。
4. 一看就知道你期待的结果,投Integer.MIN_VALUElong

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

5. 2147483648不能存储在java中一个整数,其二进制表示是为-2147483648。
6. 但(int) 2147483648L == -2147483648有一个负数而没有正相当于所以没有积极的价值吧。你会看到则为Long.MAX_VALUE的行为。

本文标题 :Math.abs为Integer.Min_VALUE返回错误的值

转载于:https://www.cnblogs.com/dailidong/p/7571201.html

Math.abs为Integer.Min_VALUE返回错误的值相关推荐

  1. 为什么Math.abs(Integr.MIN_VALUE)==Integer.MIN_VALUE

    public class Test { public static void main(String[] args) {int a=Integer.MIN_VALUE;System.out.print ...

  2. 为什么Math.abs(Integr.MIN_VALUE)==Integer.MIN_VALUE 1

    public class Test { public static void main(String[] args) {int a=Integer.MIN_VALUE;System.out.print ...

  3. 【转载】 C#使用Math.Abs返回数值的绝对值

    在C#的数值运算中,有时候我们需要计算值类型对象的绝对值,此时需要用到C#的数值计算类Math类中的Abs绝对值函数,Math.Abs绝对值函数一共有7个重载类型,支持decimal.double.f ...

  4. Math.abs()不能做到的事情

    Math.abs( T a) 是对数据进行求绝对值的,但是在下面的测试上就不能够完美的表现出他的功能. 对于Integer.MIN_VALUE和Long.MIN_VALUE来说,Math.abs()对 ...

  5. java使用abs函数_Java Math abs()用法及代码示例

    java.lang.Math.abs()返回给定参数的绝对值. 如果参数不为负,则返回参数. 如果参数为负,则返回参数的取反. 用法: public static DataType abs(DataT ...

  6. java中的math.abs_java – Math.abs(a – b)的更快实现 – Math.abs(c – d)?

    我有一个Java方法,它在一个非常紧凑的循环中重复计算以下表达式,并且重复次数很多: Math.abs(a - b) - Math.abs(c - d) a,b,c和d是可以跨越其整个范围的长值.它们 ...

  7. Integer.MIN_VALUE

    原文地址 说来惭愧,第一次看见种形式的整形值,以前只是知道整形有范围,还不知道是这样取到的,其他的也不清楚 这里自己记录一下,方便以后查看. 在JDK中,整形类型是有范围的,最大值为Integer.M ...

  8. C#FTP下载文件出现远程服务器返回错误: (500) 语法错误,无法识别命令

    如果下载多个文件的时候,有时候莫名其妙的出现500服务器错误,很有可能是没有设置KeepAlive 属性导致的. 出现应用程序未处理的异常:2015/1/6 11:40:56 异常类型:WebExce ...

  9. JavaScript中带有示例的Math.abs()方法

    JavaScript | Math.abs()方法 (JavaScript | Math.abs() Method) Math operations in JavaScript are handled ...

最新文章

  1. 《Web接口开发与自动化测试 -- 基于Python语言》 ---前言
  2. python画散点图分布-python画时间序列散点图
  3. Filecoin: 影响力容错(PFT)和预期共识(EC)
  4. 随机生成器、thread(暂停)、清屏定义
  5. 在java中的ascii_在Java中绘制ASCII艺术
  6. 听 Fabien Potencier 谈Symfony2 之 《What is Symfony2 ?》
  7. 老司机带你在MySQL领域“大吉大利,晚上吃鸡”
  8. ActiveReports 报表应用教程 (5)---解密电子商务领域首张电子发票的诞生
  9. ps cs6 磨皮插件_DR5插件加强版 for Mac(ps磨皮滤镜)
  10. Xilinx FPGA用户原语介绍
  11. USB和串口的区别是什么?
  12. systrace抓取方式
  13. JavaScript经纬度和地图坐标相互转换
  14. 北邮石川教授:「异质信息网络」研究现状及未来发展
  15. SView三维轻量化浏览器
  16. 2016年东莞市程序设计竞赛镇区选拔赛上机试题小学组:seat(找座位)
  17. 太阳能路灯c语言程序,基于单片机的智能太阳能路灯控制系统的设计方案
  18. 学会了使用计算机之后作文,我学会了计算机
  19. 你改变不了环境,但你可以改变自己
  20. JavaScript-原型详解

热门文章

  1. PDF Reader
  2. 天鹅给癞蛤蟆的回信[转贴]
  3. replace 替换字符串
  4. 《高新技术企业知识产权管理》阅读笔记
  5. html radio 作用域,ionic 表单输入 ion-checkbox ion-radio ion-toggle ion-spinner
  6. iis6扩展php_Web服务器IIS6的PHP5.2.5最佳配置方法
  7. Elastic-Job任务类
  8. MySQL排序查询介绍
  9. MySQL高级 - like模糊匹配
  10. 高仿真的类-AbstractApplicationContext