Java中int的取值范围的原因
为什么Java中int型数据取值范围是[-231, 231-1]
为什么Java中int型数据取值范围是[-231,231-1],网上很多解释都存在问题。
- int是Java中的8种基本类型之一,一个int值占4个字节byte,一个字节是8位bit(即8个二进制位),所以int型占32位。其中第一位是标志位,标志位为0表示正数,标志位为1表示负数,剩余的31位是用来表示数字部分的。
- 在计算机中,数值一律用补码来表示和存储,原因在于,使用补码,可以将符号位和数值域统一处理。同时,加法和减法也可以统一处理。
- 正整数的补码是其二进制表示,与原码相同。正数的反码与其原码相同,正数的原码、反码、补码都是相同的。
- 例:+9的补码是00001001。注意:这个+9的补码是用8位2进制来表示的,补码表示方式很多,还有16位二进制补码表示形式,以及32位二进制补码表示形式,64位进制补码表示形式等。每一种补码表示形式都只能表示有限的数字。
- 求负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1。即负数的反码是对正数逐位取反,符号位保持为1。负数的反码等于原码符号位不变,其余各位逐位取反,补码等于反码加1。
- 例:-5对应正数5(00000101),那么-5(10000101),→所有位取反(11111010)→加1(11111011),所以-5的补码是(11111011)。
- 例如:0的补码,数0的补码表示是唯一的。
- 例:[+0]补=[+0]反=[+0]原=00000000,[-0]补=11111111+1=00000000。
为什么Java中int型数据取值范围是[-231,231-1]。即-2147483648 ~ 2147483647。
1) 因为int型数据类型是有符号位的,所以这里拆分为两部分,一部分是正数,一部分是负数进行观察。2)正数的范围是从1 ~ 2147483647的。
例:1的原码为0000 0000 0000 0000 0000 0000 0000 0001。2147483647的原码为0111 1111 1111 1111 1111 1111 1111 1111。所以最大的正整数是2147483647。这里简单计算一下,为什么原码为0111 1111 1111 1111 1111 1111 1111 1111的最大的正整数是2147483647。当为1位时0000 0000 0000 0000 0000 0000 0000 0001,最大值的二进制就是1,也就是十进制的1 = 1,也就是2^1 - 1,当为2位时0000 0000 0000 0000 0000 0000 0000 0011,最大值的二进制是11,也就是十进制的1 + 2 = 3,也就是2^2 - 1,同理,8位时0000 0000 0000 0000 0000 0000 1111 1111,最大值的二进制是8个1,也就是1111 1111,算下来的十进制数值就是1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255,也就是2^8 - 1,依此类推即可。3)负数的范围是从-1 ~ 2147483648的。
例:-1的原码为1000 0000 0000 0000 0000 0000 0000 0001,反码为1111 1111 1111 1111 1111 1111 1111 1110,补码为1111 1111 1111 1111 1111 1111 1111 1111。-2147483647的原码为1111 1111 1111 1111 1111 1111 1111 1111,反码为1000 0000 0000 0000 0000 0000 0000 0000,补码为1000 0000 0000 0000 0000 0000 0000 0001。那么为什么负数的范围是从-1 ~ 2147483648的。因为要看0了。
4)在二进制中,0有两种表方法。+0的原码为0000 0000 0000 0000 0000 0000 0000 0000,-0的原码为1000 0000 0000 0000 0000 0000 0000 0000,因为0只需要一个,所以把-0拿来当做一个最小的数-2147483648。-2147483648的补码表示为1000 0000 0000 0000 0000 0000 0000 0000,在32位没有原码。由于1000 0000 0000 0000 0000 0000 0000 0000本身代表的是2147483648(即2的32-1次方),再加上最高位为1,那么就是个负数,再加上所有的二进制表示又少了一个,因此,1000 0000 0000 0000 0000 0000 0000 0000就顺理成章的成了-2147483648,当然,1000 0000 0000 0000 0000 0000 0000 0000是补码,它没有原码和反码。
5)-2147483648的补码表示为1000 0000 0000 0000 0000 0000 0000 0000,在32位没有原码。注意,这个补码并不是真正的补码,-2147483648真正的补码是1 1000 0000 0000 0000 0000 0000 0000 0000,在Java的int基本数据类型中溢出了。所以带符号32位int类型整数为-2147483648~2147483647
参考链接:Java中int取值范围的原因
Java中int的取值范围的原因相关推荐
- Java|Java中int的取值范围是多少
Java 中 int 的取值范围是:-2^31 ~ 2^31-1 大致想一下,int 占 4字节,也就是 32 位,int 是有符号的,最高位为符号位.所以剩下31个位置. 那么我们大胆猜测一下,最大 ...
- Java中int的取值范围
先上代码,通过下面代码的执行结果观察 public class Test {public static void main(String[] args) {// 2的31次方int j = (int) ...
- java中int的取值范围是多少
最近在看算法书的时候发现一个非常有意思的现象,在java中输入: System.out.println(Math.abs(-2147483648)); 输出为:-2147483648 针对这个问题,我 ...
- java int值的范围_java中int的取值范围是多少
java中int的取值范围是多少 发布时间:2020-06-26 14:53:13 来源:亿速云 阅读:159 作者:Leah 今天就跟大家聊聊有关java中int的取值范围,可能很多人都不太了解,为 ...
- python中int数据范围_Python中int的取值范围是多少
Python中int的取值范围是多少 发布时间:2020-10-30 09:33:50 来源:亿速云 阅读:66 作者:小新 这篇文章将为大家详细讲解有关Python中int的取值范围是多少,小编觉得 ...
- C/C++中int的取值范围
直接答案: 我们常常看到int取值范围为-32768-32767,实际上int的取值范围依赖于计算机系统,在16位机器中,int占16位,其中一位为符号位,所以取值范围为前面所说的-32768-327 ...
- Java中数据类型的取值范围
整数数据类型的取值范围 我们都知道计算机的底层是二进制,也知道不同的整数类型存储值的范围不同,可这些数值在计算机底层是怎样存储的呢?数值范围又是怎么计算出来的呢? 下面以java来进行举例: byte ...
- java中random方法取值范围_Java中的Random()函数
今天在做Java练习的时候注意到了Java里面的一个随机函数--Random,刚开始只是知道这个函数具有随机取值的作用,于是上网搜索了资料一番,做了一下一些关于Random函数的总结: Java中存在 ...
- java中integer取值范围,Java中的Integer取值范围(-2^32 ~ 2^31 - 1)分析
在Java中Integer的最小值(MIN_VALUE).最大值(MAX_VALUE)定义如下: /** * A constant holding the minimum value an {@cod ...
最新文章
- hiho_1139_二分+bfs搜索
- 基于OpenCV的行人目标检测
- 古朴西安:乘汽船去机场
- freemark简单事例
- leetcode : Reverse Linked List II [two pointers]
- AOP的MethodBeforeAdvice
- Dreamweaver中如何格式化代码
- 讲解Java中的String几种类型
- RSS、Atom和Feed概念与实现(django)
- WCF透明代理类,动态调用,支持async/await
- T-SQL行合并成列与列拆分成行
- 大数据hadoop学习【9】-----通过JAVA语言编程,实现对Hbase数据库表及数据的相关操作
- 电梯轿厢内电动车自行车人数据集,VOC标签格式已标注
- utc时间 单位换算_DataTime.Now.Ticks精确的时间单位[转]
- 软件测试与质量保障之间的关系
- 今日分享—————论成长性思维对人的重要性
- python魔方方法__add__、__mul__、__sub__、__truediv__
- 英国python工资_就业强势起薪高?英国BA硕士哪家强?!
- MS10_002漏洞利用
- DCF(Discounted Cashflow)模型(学习笔记三)
热门文章
- 过程计算机系统 pcs,炼钢AOD炉过程计算机系统设计与实现-软件工程专业毕业论文.docx...
- 多智能体系统——竞争网络下异构多智能体系统的分组一致性问题 Group consensus of heterogeneous multi-agent system (附论文链接+源码Matlab)
- Java下载Excel文件
- 【机器学习】深度学习20个笔试题
- 中文写程序,何陋之有?
- HTB打靶(Active Directory 101 Reel)
- SASE:基于数字身份标识的网络与安全访问云服务
- 深度解析Linux通过日志反查***
- UML 之 C++类图关系全面剖析
- ShopXO开源电商系统源码支持PC+H5支付宝小程序微信小程序百度小程序头条amp;抖音小程序QQ小程序APP等