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

上面代码的结果是true,这跟我们希望的结果相反,为什么绝对值函数没有得到正确结果呢,我们来看下源码

public static int abs(int a) {return (a < 0) ? -a : a;}

在abs的源码中,对于负数直接使用了加上负号来取法,但是我们知道,因为存在0,int的范围是[-2^31,2^31-1],

所以最小的数-2^31加上负号对应的2^31其实超过了int对应的最大整数范围。我们再来从字节的角度分析一下,32位太长了

这里我用1字节意思一下,数字在计算机内用补码表示

127: 0111 1111

-128: 1000 0000

按照加负号的取反过程,回顾一下组原的知识,负数取反是先所有位取反(包括符号为),再+1

也就是0111 111再+1,于是有1000 0000,这样原因和过程就一目了然了

扩展:从上面的字节表示我们还可以看出Integer.MAX_VALUE+1=Integer.MIN_VALUE

为什么Math.abs(Integr.MIN_VALUE)==Integer.MIN_VALUE相关推荐

  1. 为什么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 ...

  2. Integer.MIN_VALUE

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

  3. 关于Integer.MAX_VALUE + 1 = Integer.MIN_VALUE 问题

    1.负数二进制表示 由于计算机中数据都以二进制表示,而负数的二级制是根据正数二进制取补码(补码就是先取反码,然后加1)得到,如: 一个int 类型的数值为5,其长度为32位,二进制表示为 000000 ...

  4. Math.abs为Integer.Min_VALUE返回错误的值

      Math.abs为Integer.Min_VALUE返回错误的值 这段代码: System.out.println(Math.abs(Integer.MIN_VALUE)); 回报-2147483 ...

  5. Java中Integer.MAX_VALUE/Integer.MIN_VALUE的含义

    leetcode209中有写到 int result = Integer.MAX_VALUE,填补一下知识盲区. integer.MAX_VALUE的含义 首先,回忆一下Java中基本数据类型有哪些: ...

  6. 原码、反码、补码(Integer.MIN_VALUE、Integer.MAX_VALUE)

    计算机以"补码"形式存储数字,通过ASCII表对应的数字存储字符,通过GBK表对应的数字存储文字. 原码: 原始二进制位,最高位是符号位.反码: (正数)反码 = 原码 (负数)反 ...

  7. Integer.MAX_VALUE和Integer.MIN_VALUE是什么?

    在java中的基本数据类型有8种: 整数型:int, short, long, byte; 浮点型:float,double: 字符类型:char: 表示真值类型:boolean: 其中:       ...

  8. java.lang.Integer.MAX_VALUE; 0x7FFFFFFF;0x80000000;java.lang.Integer.MIN_VALUE这是什么意思?

    在Java中,一共有8种基本数据类型: 整数型:int , short , long , byte . 浮点型:float , double . 字符类型:char . 表示真值的类型:boolean ...

  9. 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是可以跨越其整个范围的长值.它们 ...

最新文章

  1. 使用WinPcap和libpcap类库读写pcap文件(002)PCAP文件格式
  2. 计算机ui答辩,KGUT1027 班级UI设计第一阶段成长答辩开始啦
  3. 十月 android版本分布,安兔兔发布2018年10月份Android手机性能排行榜
  4. mysql 动态游标_mysql动态游标与mysql存储过程游标(示例)
  5. Leet Code OJ 118. Pascal's Triangle [Difficulty: Easy]
  6. 快手春节活动奖励未到账,被羊毛党投诉上了全国12315平台
  7. react 路径跳转组件不跳转_Taro 小程序开发大型实战(二):多页面跳转和 Taro UI 组件库...
  8. Python植物大战僵尸源代码及素材
  9. 使用 vlmcsd 部署 KMS 服务器
  10. Visual Studio Code 编辑器
  11. 笔记本电脑插网线显示未识别的网络_笔记本插入网线,显示未识别网络
  12. 孕妇睡眠质量差怎么办?如何提高睡眠质量?
  13. windows和linux环境下的嵌入式开发区别
  14. C++ day22 继承(二)基类指针数组通过虚方法实现智能的多态
  15. 计算机一级execl怎么学,【计算机一级 excel】大学计算机一级excle
  16. 构建基于词典的Lucene分析器
  17. 2017京东校招终结者问题
  18. CMOS 和CCD的区别
  19. php防止恶意刷新与刷票的方法
  20. 服务器出错的原因有哪些 原

热门文章

  1. boost::math模块使用拉普拉斯(与正态比较)分布的示例的测试程序
  2. boost::hana::infix用法的测试程序
  3. boost::describe模块实现连载功能的测试程序
  4. Boost:双图bimap与Boost xpressive的测试程序
  5. ITK:获取图像中标记区域的统计属性
  6. VTK:可视化之SideBySideViewports
  7. VTK:可视化之Lorenz
  8. Qt for QNX
  9. Qt Creator将纹理附加到材质
  10. OpenGL 分层渲染Layered Rendering的实例