我觉得这是一个非常有意思的问题,Math.abs(-2147483648)的返回值应该是什么?

java计算结果
为什么没有得到正数结果呢?

首先我们先看下java区分整数正负的原理。在二进制的情况下,java使用0和1来代表正和负,最高位——左面第一位为1代表负数,最高位为0就代表正数。在32位的int二进制表示里,最高位是预留出来表示正负号的。
我们知道java 32位int的值域为(-2147483648,2147483647],转换成二进制如下:
最大值为:2147483647, 二进制:01111111111111111111111111111111
最小值为:-2147483648,二进制:10000000000000000000000000000000

而二进制正负转换的方式是反码+1,反码就是正码的所有位数的0和1对换。
-2147483648的二进制正码:10000000000000000000000000000000
-2147483648的二进制反码:01111111111111111111111111111111
-2147483648的二进制反码+1:10000000000000000000000000000000

这样子二进制数字就又和原来的一样了,所以Math.abs(-2147483648) 等于-2147483648。

总结

如果计算的数字比较大,超过10亿的那种,一定要使用long长整形。比如下面的样子。

长整形求绝对值

长整形求绝对值结果

最新文章

  1. [原][C#][winForm]分级基金折溢价WinForm网络计算器
  2. 输出国际象棋&&输出余弦曲线
  3. Orchard源码分析(7.1):Routing(路由)相关
  4. 几个与特殊字符处理有关的PHP函数
  5. java 分析方法调用过程
  6. jq中 offset()方法, scrollTop()方法以及scrollLeft()方法
  7. NGUI 自定义 Drag Item Script
  8. dbt
  9. 【LeetCode】Minimum Depth of Binary Tree 二叉树的最小深度 java
  10. 一道TOPK问题
  11. C#学习单向链表和接口 IList<T>
  12. Mac下ImageMagick安装(libpng)
  13. Centos6.5系统关闭防火墙
  14. Unique Snowflakes UVA - 11572 (离散化+尺取法)
  15. 关于click的多次触发问题(冒泡事件)
  16. mysql find_in_set
  17. 用 free 或 delete 释放了内存之后,立即将指针设置为 NULL,防止产 生“野指针”
  18. 获取一个表单字段中多条数据并转化为json格式
  19. logstash在Windows2008简单配置实例
  20. 【转】Nginx反向代理转发tomcat

热门文章

  1. coredump分析
  2. Redis--各个数据类型最大存储量
  3. vue2.0中改变了数组值不能实时反映到页面
  4. 【bzoj2956】模积和 数论
  5. 后缀数组 模板题 hdu1403(最长公共(连续)子串)
  6. 详解npm的模块安装机制
  7. [BZOJ1921] [CTSC2010]珠宝商
  8. bug 跟蚊子的相似之处
  9. BZOJ2120 数颜色 【带修改莫队】
  10. 阿里巴巴前端面试parseInt()函数的面试题