算法| Java的int类型最大值为什么是21亿多?

news2024/11/17 5:20:35

开篇

本文主要介绍在Java中,为什么int类型的最大值为2147483647

理论值

我们都知道在Java中,int 的长度为32位。

理论上,用二进制表示,32位每一位都是1的话,那么这个数是多少呢?

我们来计算一下,第0位可以用20^00表示,第1位可以用21^11表示,第31位可以用231表示,那么32位二进制能够表示的最大值为232 - 1,所以理论上32位数值的取值范围为0 ~ 232 - 1

那么,Java的int最大值真的为232 - 1吗?

我们知道,232 - 1这个值为42亿多。而在Java中,int的最大值为2147483647也就是21亿多,为什么有这个差距呢?

分析

我们来看下,Javaint的最大值以及这个最大值的二进制数据。

可以看到,int的最大值的最高位为0,而不是1,也就是用31位来表示能够取到的最大值,而不是32位。 因为在Java中,整型是有符号整型,最高位是有特殊含义,代表符号,真正表示数据值的范围为0 ~ 30位。

所以,按照31位来表示的话,其最大值为231 - 1,而这个值就是2147483647即21亿多。

int数据有正负之分,所以最高位用来表示符号,0代表正数,1代表负数。因此Java中,int的数据范围为 -231 ~ 231 - 1

为啥减1

那为什么都是231, 正数的时候需要减1呢?

我们先来看一下,int的最大值和最小值:

不看符号位的话,最大值比最小值少了1个,这是因为0归到正数里面,所以占用了正数的一个位置。

拓展

负数表示

负数的二进制形式如何表示呢?

先看-100这个数的二进制形式:

最高位为1,就代表负数。值就为符号位后面的值取反再加上1。

二进制1100100对应的10进制就是100.

反码

反码就是,对一个数的二进制除符号位外,按位取反。取反就是二进制数,1变成0,0变成1,这个过程就是取反。

来看一个例子:

可以看到,ab两个数的二进制是完全相反的。

为什么要取反加1呢?为什么要设计的这么扭曲?到底是人性的扭曲还是道德的沦丧? 这样设计有什么好处?

在计算机系统里,加减乘除的运算,并不是我们想象中10进制的加减乘除,他最后都会被翻译成2进制的位运算来计算。

假如有2个数,ab都是整数,那么a + b 对应的二进制就是简单的相加。那么如果a为负数,b为正数呢?在执行a + b 的时候,难道还需要特殊处理一下吗?显然是不可能的,在二进制运算中,加减乘除运算只有各自的一套逻辑,无论符号两边的数是什么样子的。

a为负数,那么对a进行取反加1,再与b进行相加,可以按正常的相加逻辑,这样运算结果依然是正确的,而不是说,当a为负数时,计算机去执行另一套的相加逻辑。设计成取反加1,可以让相加运算不去关注两边的数据是正是负,只执行一套相加逻辑就可以了,这对计算机来说是一个性能的提升。

示例

从上面我们得知,负数的二进制表示为数值部分取反加1,以-100为例,那么可以得出-100 等于 ~100 + 1

知道负数的二进制的样子后,再看int最小值和-1的二进制数据,就不会惊讶了。要不然,当看到int的最小值的二进制居然是一堆0组成,而-1居然是一堆1,看到这样的数据,心里岂不是冒出一堆问号或者一群小羊飘过。

取反加1还是自己的数

有没有一个数,取反加1还是自己?有,0int的最小值,下面来看下:

先看下Integer.MIN_VALUE的取反加1的过程,可以看到,Integer.MIN_VALUE在取反后加上1,仍然还是他自己。

再看下0的取反加1过程,可以看到0再取反加1后,我嘞个去,居然溢出了!溢出怎么办?溢出就扔了吧不要了,结果还是他自己。

后记

本文主要介绍在Java中,为什么int类型的最大值为什么是21亿多,以及涉及到的知识点的拓展,如有错误欢迎之处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/107739.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【QGIS入门实战精品教程】10.1:QGIS基于DEM数据的地形分析案例教程

本文讲解QGIS中基于DEM数据的地形分析方法,包括:坡度分析、坡向分析、山体阴影、地貌分析、强度指数(地形复杂性)。 文章目录 一、加载DEM二、坡度分析三、坡向分析四、山体阴影五、地貌分析六、强度指数(地形复杂性)QGIS提供了地形分析的工具,位于工具箱→Raster terrain a…

录屏怎么录声音?电脑录视频怎么带声音?图文教学来了

电脑录屏功能的应用,给我们的日常生活带来了便利。随着电脑录屏功能的应用,“电脑录屏”随着功能的升级,电脑屏幕录制不仅仅是简单的屏幕录制,还有很多额外的功能,比如录制带声音的视频!那么录屏怎么录声音…

[C++]类和对象【下】

🥁作者: 华丞臧 📕​​​​专栏:【C】 各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞收藏关注)。如果有错误的地方,欢迎在评论区指出。 推荐一款刷题网站 👉LeetCode 文章目录再谈构造…

结构建模设计——Solidworks软件之装配体操作基本总结一(装配体功能界面简介、插入零件操作、基本配合操作)

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《QT开发实战》 《嵌入式通用开发实战》 《从0到1学习嵌入式Linux开发》 《Android开发实战》 《实用硬件方案设计》 长期持续带来更多案例与技术文章分享…

漏洞猎人白夜追凶记

编者按 数字化浪潮蓬勃兴起,企业面临的安全挑战亦日益严峻。 腾讯安全近期将复盘2022年典型的攻击事件,帮助企业深入了解攻击手法和应对措施,完善自身安全防御体系。 本篇是第三期,用一个实际案例讲述了企业在面临攻击时&#xf…

【Java枚举类与注解】——一篇文章读懂枚举类与注解

文章目录2.枚举2.1概述2.2定义格式2.3枚举的特点2.4枚举的方法3.注解3.1概述3.2自定义注解3.3 元注解2.枚举 2.1概述 为了间接的表示一些固定的值,Java就给我们提供了枚举,是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。 …

C. Arpa’s overnight party and Mehrdad’s silent entering(构造+二分图)

Problem - 741C - Codeforces 请注意,阿尔帕的土地上的女孩真的很有吸引力。 阿尔帕喜欢过夜的聚会。在一次聚会中,迈尔达德突然出现。他看到n对朋友围坐在一张桌子旁。第i对包括一个男孩,坐在第i把椅子上,和他的女朋友&#xff…

【LeetCode每日一题】——264.丑数 II

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 动态规划 二【题目难度】 中等 三【题目编号】 264.丑数 II 四【题目描述】 给你一个整数 n …

React DAY06

复习: 1.React是一个用于构建用户界面的JS库——不涉及HTML/CSS。可用于创建PC网站、H5、WebApp、NativeApp。2013年中Facebook开源,目前最新版V18.2。 主要知识点: ①使用React的两种方法:脚本引入式、脚手架方式(create-react-…

VUE部署至Nginx

VUE部署至Nginx安装Nginx解压Nginx配置VUE文件配置Nginx启动Nginx快速停止或关闭nginx正常停止或关闭nginx配置文件nginx.conf修改重装载命令安装Nginx 网址:https://nginx.org/en/download.html 选择图中红框下载安装 解压Nginx 只需要解压到目录,无…

GitHub典藏版,腾讯T14级高级程序员亲码的分布式数据库实践,再次爆火

数据库就是要做好五件事,存储、事务、查询、复制和其他。而对分布式数据库来说,不仅要继续做这五件事,还要多出一件事,分片。在这六件事中,存储和其他这两件事与单体数据库差不多,难点就在事务、查询、复制…

论文复现丨基于ModelArts进行图像风格化绘画

摘要:这个 notebook 基于论文「Stylized Neural Painting, arXiv:2011.08114.」提供了最基本的「图片生成绘画」变换的可复现例子。本文分享自华为云社区《基于ModelArts进行图像风格化绘画》,作者: HWCloudAI 。 项目首页 | GitHub | 论文 …

敏捷、分散式的数据治理,该如何实现?

01 数据资产的生产和消费现状 —— 孤岛就在那里! 在大数据时代,企业数据资产的生产和消费,实际现状大概是这样的。 一方面,每个业务部门都产生并存储了大量的数据。这些数据存储在不同的系统中。每个业务部门都是数据的生产者…

安卓逆向-某音乐软件

初学安卓逆向,如有错误请指教 某我音乐9.3.4.4版本,需要资源的请流言(也可以自行去下载) 直接将apk拖入到AndroidKiller里面(该工具自行下载) 首先去除广告 直接全局搜索KEY_EXTRA_AUTH,可以只在.smali文件里面搜索…

【gitlab wiki】git首次上传本地文档操作步骤

1.在gitLab中创建一个项目 2.进入本地电脑中的你要上传文件的文件目录,右击鼠标选择“ Git Bash Here” git命令窗口(本机电脑要安装好git) 3.在远程git项目中,复制出项目http地址。 4.在“ Git Bash Here” git命令窗口输入命令:git clone h…

Java+MYSQL基于ssm的网上出差审批与费用报销管理系统

全新的时代,新的技术推动着公司管理制度的改革,在管理层面加入了先进的科学技术做到了与时俱进,所以企业创建自己的网上出差审批与费用报销系统是迫切需要的。在新时代的背景下,传统管理方式的缺点被暴露出来,传统管理方式的不足的地方有管理及时性不够,下达一个指令以后需要层…

AuthLab权限在线靶场通关记录

AuthLab通关记录 一个在线的权限靶场:https://authlab.digi.ninja/ 靶场内容比较简单,包括了JWT以及一些基本情况的权限Bypass IP Based Auth Bypass 该关卡根据提示有一个ip在192.168.0.100-200范围里可以直接bypass 拦截请求包修改X-Forwarded-For爆…

python网络副业有哪些?以自身经历分享怎么做副业挣钱

网络副业我个人比较看好的是Python,至少我是真实体会到了Python做副业真香,疫情被关在家那段时间也没耽误赚钱,反而比平常赚的还多一点,下图是我疫情期间在家做Python副业收入的部分截图,那会儿我用Excel表格每天记了一…

BEPU物理引擎碰撞系统的架构与设计

前面我们讲解了如何监听物理引擎的碰撞事件, 在物理引擎内核中如何架构与设计碰撞规则,使得物理Entity与周围的物理环境产生碰撞时,如何灵活的控制物理碰撞,本节給大家详细的讲解BEPUphysicsint 物理引擎内部是如何管理与控制碰撞规则的。本文主要讲解3个…

彻底删除的文件如何恢复?误删数据恢复,四种方法就可以解决

电脑磁盘中存储了许多文件,我们不可避免地会误删一些文件,但是我们中的许多人不知道在文件被错误删除后如何恢复它们。事实上,误删数据恢复没有想象中那么难,我们自己也可以操作完成。到底是什么方法?接下来我们将详细…