为什么java中的int类型范围是-2的31次方到2的31次方减一?
在java基础类型中,int类型占四个字节,而每个字节在内存中占8位(8byte),所以可以使用共4X8=32个位数来存储该类型,也就是四个八位的二进制数,所以有了以下说法
在计算机中,它的二级制表示为四个长度为8的二进制数,00000000 00000000 00000000 00000000,不了解的同学可以补一下原码,反码和补码的概念,计算机中的数字是以补码的形式存储的
正数的原码 补码 是相同的,负数不同,负数反码为除符号位的其它位数取反,补码为反码加一,引入反码 补码是为了表示负数来区别开正数,因为二进制没有正负的区别,要区别就得加个标识,就是符号位,按约定,最高位为符号位
首位加粗的0就是是符号位,根据正负要求固定为0或1,为0则代表正数,为1则代表负数
所以实际可用的位数是31位,若为负数,最小表示时,首位为1,其余位数全部为1,则为111111111 11111111 11111111 11111111,其补码为10000000 00000000 00000000 00000001转换成十进制就是-2147483647,即-2^31 + 1,那么看到这里,大家都应该认为int的范围是 -2^31 + 1 到2^31 -1,也就是-2147483647到2147483647,那为什么负数最小能表示到-2147483648 即-2^31呢?问题就出在0上
0的补码,数0的补码表示是唯一的, 例:[+0]补=[+0]反=[+0]原=00000000,[-0]补=11111111+1=00000000
在二进制中,0有两种表方法。+0的原码为0000 0000 0000 0000 0000 0000 0000 0000,-0的原码为1000 0000 0000 0000 0000 0000 0000 0000,因为0只需要一个,而取正0作为0来区别正数和负数
巧合的是-2147483648的补码表示为1000 0000 0000 0000 0000 0000 0000 0000,与-0的原码是一致的,这样,-0便被利用起来,存储-2147483648。
而正数,最大表示时,首位符号位为0,其余位数为1,则为01111111 11111111 11111111 11111111,即2^31-1(2147483647),如果不减一,就是2^31(2147483648),这是你发现2^31二进制补码表示为11111111 11111111 11111111 11111110 ,符号位被占用了而且为1
而符号位为1则代表负数,也就是位数不够用了,若想表示成正数需要多一位表示符号,即 01111111 11111111 11111111 11111110,这样就变成了33位,超出表示范围
所以,java中int类型表示范围是-2^31到2^31-1,大概是21亿左右,注意超出这个范围的数据不要用int类型接受,会有精度问题
这篇博客刚发的时候是有点问题的,已经修正,欢迎读到这篇文章的大牛们给一些指正
参考:https://blog.csdn.net/u011652364/article/details/104549474?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-1.control
https://www.zhihu.com/question/434725769/answer/1625945603
为什么java中的int类型范围是-2的31次方到2的31次方减一?相关推荐
- *java* 在Java中给Int类型的最大值+1 ,以及int与byte之前强转的例子
1.给int最大值+1 public class Test1{public static void main(String[] args){//保存当前int的最大值,同理也有long maxValu ...
- java中如果int类型超出了它的范围
背景引入 今天老师上课的时候,写了一个循环语句,看起来就是普通的循环,不信看代码: int count = 0;while(true){count ++;if (count<20){System ...
- java将一个整数按字节输出_在java中的整数类型有四种,分别是 byte short int long 其中byte只有一个字节 0或1,在此不详细讲解。其他的三种类型如下:1、...
在java中的整数类型有四种,分别是 byte short int long 其中byte只有一个字节 0或1,在此不详细讲解. 其他的三种类型如下: 1. 基本类型:short 二进制位数:16 ...
- JAVA里面的int类型 和Integer类型,有什么不一样
JAVA里面的int类型 和Integer类型,有什么不一样 原创 2013年09月04日 23:15:11 标签: java / 2120 编辑 删除 JAVA里面的int类型 和Integer类型 ...
- Java中,一切皆是对象——java中的对象类型与基本数据类型的区别
起因:取一个list给另一个list赋值,然后在另一个list中取出进行修改.list其中类型为对象时,String时,基本数据类型时. [java中的对象类型与基本数据类型的区别] #声明和实例化 ...
- java中的null类型---有关null的9件事
摘自 https://blog.csdn.net/qq_25077777/article/details/80174763 今天听到一个问题,java中的null类型,null竟然是一种类型 java ...
- byte java byte_详解java中的byte类型
Java中整数类型有:byte占8位, short 占16位, int占32位, long占64位 Java也提供了一个byte数据类型,并且是基本类型中的整数类型.java byte是作为最小的数字 ...
- Java中关于String类型的10个问题
转载自 Java中关于String类型的10个问题 1. 如何比较两个字符串?用"="还是equals 简单来说,"=="是用来检测俩引用是不是指向内存中的 ...
- Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?...
<Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?> <Java中的值传递和引用传递> 原理知识: 如果参数类型是原始类型,那么传过来的就是这 ...
最新文章
- 深度学习之seq2seq、编码器解码器、注意力机制、Transformer
- rapidxml修改节点的值
- PHP的global与GLOBAL
- python二分法求方程的根_Python查找函数f(x)=0根的解决方法
- java中常用的String方法
- Qt简单的解析Json数据例子(一)
- 为什么80%的码农都做不了架构师?
- 2021第一场教师招聘考试3.28开始!一个月备考来得及吗?
- Latex排版:CTeX winEdit 输出“系统找不到指定的文件”的解决办法)
- 遥感数据集_最新高光谱遥感数据集
- Scrum vs Waterfall vs Agile vs Lean vs Kanban
- 《统计学习方法》python代码资料
- 点云数据集汇总整理(匠心之作,附官方下载地址)
- Python数据库编程
- 电商项目测试核心内容
- 第十一届蓝桥杯 2020年省赛真题 (C/C++ 大学A组) 第一场
- AAAI-2021-RE-Progressive Multitask Learning with Controlled Information Flow for Joint Entity and Re
- Excel编程环境搭建
- Ionic3.x 创建项目中的问题-IonIC start myApp tabs
- 目前流行的装修风格_现在最流行的装修风格是什么 装修风格流行趋势是什么...
热门文章
- NLP-预训练模型-2019-NLU+NLG:BART【Bert+GPT的泛化Seq2Seq模型】【噪声破坏后的原文本喂给编码器,解码器输出原文本】【噪音方案:文本填充(文本片段用单个掩码替换)】
- PS工具栏之【选择工具栏和编辑工具栏】矩形和椭圆的使用技巧
- 为什么要用IPv6取代IPv4呢
- 本周AI热点回顾:Github私有库无限协作、飞腾适配百度昆仑AI处理器、OpenAI发布神经网络可视化库
- 类变量、成员变量、局部变量存放位置
- coco数据集的学习和理解
- 数据库 | SQL 诊断优化套路包,套路用的对,速度升百倍
- Pregel:一个大规模图计算系统
- 二极管的直流等效模型
- 【一起入门MachineLearning】中科院机器学习第*课-非线性分类:决策树