我们研究的是int类型的数据类型。

        int a = 2147483647;int b = 1;int c = a + b;System.out.println(c);.//输出结果为-2147483648

首先要知道int数据类型的取值范围是 -2^31 ~ 2^31-1 也就是(-2147483648 ~ 2147483647)

2147483647的二进制为0111 1111 1111 1111 1111 1111 1111 1111

对这个这个二进制数+1,结果为1000 0000 0000 0000 0000 0000 0000 0000 ,结果正好是

-2147483648

这时候会有人问,为什么这个结果不是-0?第一位不是符号位吗?

原因如下:

假设字长为n比特,原码、反码能够表示的有符号数真值范围都是[-2^(n-1) + 1, 2^(n-1)-1],而补码能够表示的真值范围是[-2n^-1, 2n^-1-1],最小值多出来了一个。以下我们假设n=8,那么原码/反码表示法的范围是[-127, 127],而补码表示法的范围是[-128, 127]。-128就是那特殊的一个,并且它在补码体系下没有原码和反码。

要搞清楚文章标题的问题,我们应该来看另一个特殊的数0。

在原码和反码表示法中,0有两种表示方式,分别为正0(0000 0000)和负0(1000 0000/1111 1111),然而在正常的算数中,0是不应该有符号的。补码表示法则没有这种区分,不论正0还是负0都会表示为0000 0000(负0取反加1丢掉溢出位后也是这个结果),所以补码正好能用1000 0000多表示一个数。根据上述补码表格中“递减”的规律,把1000 0000放在-127的后面,表示-128正合适(1000 0000 + 0111 1111 = 1111 1111 = -1),也符合符号位为1表示负数的惯例。

同理,n=16时(对应C语言的short),范围为[-32768, 32767];n=32时(对应C语言的int),范围为[-2147483648, 2147483647]。

总而言之,我们可以认为 1000 0000 0000 0000 0000 0000 0000 0000 的值就是-2147483648

参考资料

出处:

为什么-128的补码是1000 0000? - 简书 (jianshu.com)

关于为什么2147483647加1后会变成-2147483648相关推荐

  1. 关于Oracle.ManagedDataAccess数据库表加字段后,必须重启的问题

    关于Oracle.ManagedDataAccess数据库表加字段后,必须重启的问题,解决方法如下: 在数据库连接字串中,增加一个参数:Metadata Pooling=false 如"Da ...

  2. 页面加载后如何使JavaScript执行?

    我正在使用<head>内的<script>执行外部脚本. 现在,由于脚本是在页面加载之前执行的,因此我无法访问<body> . 在文档"加载"后 ...

  3. alert时java还时js_js 加alert后才能执行方法

    原因是:访问页面时,某些js方法还没初始化(或者还没有加载出来)此时调用肯定不执行.alert起到了延迟的功能,当用户点击确定此时要执行的js恰好初始化完成,能正常执行. 解决方法是 加setTime ...

  4. C#实现网页加载后将页面截取成长图片 | Playwright版

    前言 如何将网页生成预览图? 要实现这个功能,可以用WebBrowser组件模拟浏览器,或者使用系统浏览器访问网页,再进行截图操作. 但是,这样需要编写大量的控制代码. 工欲善其事,必先利其器! 利用 ...

  5. word的公式后加编码后自动变小

    如图所示,在公式后面加编码后公式也变小了: 加编码前: 加编码后: 采用样式分隔符(Ctrl+alt+enter)即可解决,输完公式后,按enter转行,输入你要的东西(编号什么的),然后再在公式后面 ...

  6. printf函数输出多个printf 、前置加加或者后置加加

    目录 (1)前置加加和后置加加的区别 (2)printf输出前置加加 (3)printf输出后置加加 (4)printf输出printf (1)前置加加和后置加加的区别 首先我们先来了解一下前置加加和 ...

  7. 更换高端游戏计算机故障电源,加内存条后电脑重启的解决办法游戏设备故障解决分享!...

    电脑加了内存条后不断重启是怎么回事?相信也有部分网友遇到了类似这样的问题,今天小编为此整理了解决加内存条后电脑重启问题的方法,有需要的朋友不妨看看吧. 加内存条后电脑重启的解决方法 1.机箱电源功率不 ...

  8. AppList.json文件为空,主界面清缓存后加载后还正常显示

    问题: AppList.json文件为空,主界面清缓存后加载后还正常显示? 解决: 清缓存后运行不行的话,SelectService中加debugger运行试试.

  9. tomcat上传文件,重新加载后删除以及在web.xml中配置全局路径

    <context-param><param-name>linux_direct</param-name><param-value>/u01/app/be ...

最新文章

  1. python 线程锁 共享全局变量 线程通信
  2. 模糊测试(fuzz testing)介绍(一)
  3. C 语言编程 — 程序的编译流程
  4. eclipse代码自动提示
  5. Spring Boot Transaction 源码解析(二)
  6. Vs Code:Remote SSH
  7. 译 | 你到底有多精通 C# ?
  8. jooq_jOOQ与Hibernate:何时选择哪个
  9. EMF的一些总结(2)——关于EMF的序列化
  10. mysql自动更新时间的触发器
  11. magento url rewrite规则
  12. Swift 5 Dictionary用法大全
  13. Canva可画成为全球增长最快软件公司之一;EDDA科技完成1.5亿美元战略融资 | 美通企业日报...
  14. 1160. 不容易系列之二
  15. linux 光盘刻录命令,Linux命令刻录光盘
  16. DBF文件实例分析(转)
  17. android设置透明主题后背景为黑色,android – 活动应该是透明的,但有黑色背景
  18. 软工网络15团队作业9——项目验收与总结
  19. 毕业一年升阿里P6的晋升总结
  20. 区块链baas平台告警方案

热门文章

  1. Selector.select
  2. 完美国际伤害减免公式及属性点对双防加成公式总结
  3. Win XP仍为占有率第三系统!
  4. 共享nas盘添加本地用户 linux,一步一步地把NAS的硬盘共享给Linux
  5. 痴情的人注定伤的最深,自古痴情终成空
  6. 批量抽取word文档中的表格
  7. 电脑文件里哪里能用计算机,文件夹选项在哪找,计算机文件夹选项在哪里
  8. python使用谷歌翻译
  9. CSP 202006-1 线性分类器 python
  10. 【推荐算法】今日头条推荐系统原理