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

article/2025/9/19 4:22:06

开篇

本文主要介绍在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://chatgpt.dhexx.cn/article/5IsZSgm0.shtml

相关文章

C++int型的数到底最大值是多少

int的范围是-2的31次方到2的31次方-1。 为什么是31次方呢:因为我的电脑是4个字节表示int,一个字节占8位。所以就32位,-1是因为int是signed有符号位的,所以就31。为什么正数要31-1呢:个人理解:(假设4个1,如…

2019latex安装教程

菜鸡一枚,一开始装latex找了好多博客,按照他们的步骤走还是失败,最后把他们集齐,拼在了一起,终于召唤出了latex!!! 参考博客链接: 安装教程 环境变量教程 安装教程 环境…

Latex安装教程 (TeX Live 和 TeXStudio)

文章目录 TeX Live 安装(1) 进入官网 [Tex Live](http://tug.org/texlive/)(2) 选择 on DVD(3) 选择 downloading the TeX Live ISO image and burning your own DVD(4) 选择 download from a nearby CTAN mirror(5) 选择 texlive2020.iso下载(6) 下载后解压:在解压…

latex安装教程(texlive+texstudio)并添加IEEE模板

[TOC]latex安装教程(texlivetexstudio)并添加IEEE模板 texlive安装 网址:https://tug.org/texlive/ texlive可以选择线上安装也可以选择线下安装(建议线上安装) texlive线上安装 第一步 第二步 第三步 点击 insta…

TeX Live2018_latex安装教程

YS 2018年8月5日15:00:32 点击链接https://tug.org/texlive/ 注:Latex不止TeX这一种,这里只给出了TeX的安装,如果想尝试别的软件的同学可以自行寻找其他教程。 并执行如下操作: 第一步 第二步 第三步 第四步 第五步 装载下载…

LateX安装下载使用详细教程

马上美赛了,想想很多队伍都会用Latex来进行论文排版,因为其功能真的十分强大,故在此发一篇安装下载的详细教程。一.关于 LaTeX和CTeX 1.LaTeX: LaTeX是一种基于ΤΕΧ的排版系统,由美国计算机学家莱斯利兰伯特&#xf…

Latex安装教程 —— textlive+textstudio+基础环境配置

一、下载textlive 下载地址:TeX Live - TeX Users Grouphttps://tug.org/texlive/ 步骤: 1.根据系统选择下载页面 2.运行下载安装程序 3.按照下载程序提示安装textlive 注意:textlive有一个选择镜像源的选项,可以选择国内的镜像…

Windows下LaTeX安装教程

文章目录 一、前言二、TeXLive下载三、WinEdt下载四、感谢 一、前言 LaTeX在Windows、Mac、Linux三个系统都具有发行版,而且版本也比较多,比如TeXLive、CTeX、MacTeX、MikTex等。本章中则主要介绍Windows下最常用的LaTeX安装方案,就是TeXLiv…

安装LaTex教程

在一场讲座里听到建议使用LaTex进行排版,说现在大多论文都是使用这个软件,界面很舒服。 于是参考了网上的一些教程,特此记录一下LaTex的安装过程: 我使用的是Windows系统 首先进入官网: https://www.tug.org/texlive/ …

Latex安装教程(附美赛论文latex模板)

文章目录 Latex简介安装步骤texlive下载配置环境变量配置Texsudiolatex版本helloworld美赛 latex模板 Latex简介 LaTeX(LATEX,音译“拉泰赫”)是一种基于ΤΕΧ的排版系统,由美国计算机学家莱斯利兰伯特(Leslie Lampo…

【LaTex】LaTex 极简安装教程

文章目录 Latex 安装教程1. 下载texlive.iso2. 点击装载3. 运行 install-tl-windows.bat 进行安装4. 验证是否安装成功5. 安装开发工具 Latex 安装教程 1. 下载texlive.iso https://mirrors.tuna.tsinghua.edu.cn/ctan/systems/texlive/Images/ 2. 点击装载 下载完成后&…

LaTex零基础入门教程(含附件:安装包+LaTex文本编译软件+SCI期刊LaTex投稿图文流程)

LaTex是一种基于ΤΕΧ的排版系统,使用LaTex最大的好处就是“只需要写内容就可以,至于内容排版就不是我们的事”。LaTex的使用可以大大提高我们科研论文写作的工作效率。平时写文章一般使用最多的排版工具是Word,使用Word一般先写好内容&…

LaTeX的安装教程(Texlive 2020 + TeX studio)

LaTeX(音译为“拉泰赫”)是一种基于ΤΕΧ的排版系统,由美国计算机学家莱斯利兰伯特(Leslie Lamport)在20世纪80年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由…

虚拟机怎么重启服务器,虚拟机服务器重启命令行

虚拟机服务器重启命令行 内容精选 换一换 确认服务器服务是否开启。登录虚拟机内部。执行如下命令,查看系统的端口监听状态,如图1所示。netstat -ntplWindows虚拟机可以在命令行中执行netstat -ano查看系统的端口监听状态,或者查看服务端软件状态。系统的端口监听状态登录虚…

【服务器重启命令】宝塔面板服务器计划任务定时重启命令

很多Linux服务器及VPS用户建站都是使用的宝塔面板,如果你跟我有一样需要每天定时重启的需要,那不妨看看该如何通过宝塔面板的“计划任务”定时重启我们的Linux服务器及VPS,此文是通过利用宝塔面板的计划任务中的 Shell 脚本来实现安全重启Lin…

华为 linux 重启命令,华为服务器重启管理口

有一批华为的服务器,通过管理口远程查看硬件状态,登陆不进去,之前是可以的。 打华为技术支持电话说通过ssh登陆管理口执行个命令就可以重启服务。 新版本远程管理叫iMana200,在这里面可以通过命令直接重启管理口服务。 rootBMC:/#…

linux服务器重启命令是什么

linux中常用的关机/重启命令有shutdown、reboot、init、halt和poweroff。它们都可以达到重启系统的目的,但每个命令的内部工作过程是不同的,下面本篇文章就来给大家分别介绍一下这些命令,希望对大家有所帮助。 1、shutdown命令 shutdown命令…

oracle11g服务器重启命令

首先省略oracle的安装等等 1.登陆oracle并成功连接 2.以sysdba连接服务器,不然会显示权限不够 命令:connect / as sysdba 3.关闭服务器 命令:shutdown immediate或shutdown abort 4.接着再启动就好了 命令:startup 这样就完…

各种服务器启动/停止/重启命令

uwsgi # 进入项目根目录# 启动 # uwsgi --ini 配置文件路径 uwsgi --ini uwsgi.ini# 重启 pkill -f uwsgi# 停止 # uwsgi --stop 配置文件路径 uwsgi --stop uwsgi.ini Nginx # 启动Nginx sudo /usr/local/nginx/sbin/nginx# 停止Nginx sudo /usr/local/nginx/sbin/nginx -s …