在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次方减一?相关推荐

  1. *java* 在Java中给Int类型的最大值+1 ,以及int与byte之前强转的例子

    1.给int最大值+1 public class Test1{public static void main(String[] args){//保存当前int的最大值,同理也有long maxValu ...

  2. java中如果int类型超出了它的范围

    背景引入 今天老师上课的时候,写了一个循环语句,看起来就是普通的循环,不信看代码: int count = 0;while(true){count ++;if (count<20){System ...

  3. java将一个整数按字节输出_在java中的整数类型有四种,分别是 byte  short int long 其中byte只有一个字节 0或1,在此不详细讲解。其他的三种类型如下:1、...

    在java中的整数类型有四种,分别是 byte  short int long 其中byte只有一个字节 0或1,在此不详细讲解. 其他的三种类型如下: 1. 基本类型:short 二进制位数:16 ...

  4. JAVA里面的int类型 和Integer类型,有什么不一样

    JAVA里面的int类型 和Integer类型,有什么不一样 原创 2013年09月04日 23:15:11 标签: java / 2120 编辑 删除 JAVA里面的int类型 和Integer类型 ...

  5. Java中,一切皆是对象——java中的对象类型与基本数据类型的区别

    起因:取一个list给另一个list赋值,然后在另一个list中取出进行修改.list其中类型为对象时,String时,基本数据类型时. [java中的对象类型与基本数据类型的区别] #声明和实例化 ...

  6. java中的null类型---有关null的9件事

    摘自 https://blog.csdn.net/qq_25077777/article/details/80174763 今天听到一个问题,java中的null类型,null竟然是一种类型 java ...

  7. byte java byte_详解java中的byte类型

    Java中整数类型有:byte占8位, short 占16位, int占32位, long占64位 Java也提供了一个byte数据类型,并且是基本类型中的整数类型.java byte是作为最小的数字 ...

  8. Java中关于String类型的10个问题

    转载自   Java中关于String类型的10个问题 1. 如何比较两个字符串?用"="还是equals 简单来说,"=="是用来检测俩引用是不是指向内存中的 ...

  9. Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?...

    <Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?> <Java中的值传递和引用传递> 原理知识: 如果参数类型是原始类型,那么传过来的就是这 ...

最新文章

  1. 深度学习之seq2seq、编码器解码器、注意力机制、Transformer
  2. rapidxml修改节点的值
  3. PHP的global与GLOBAL
  4. python二分法求方程的根_Python查找函数f(x)=0根的解决方法
  5. java中常用的String方法
  6. Qt简单的解析Json数据例子(一)
  7. 为什么80%的码农都做不了架构师?
  8. 2021第一场教师招聘考试3.28开始!一个月备考来得及吗?
  9. Latex排版:CTeX winEdit 输出“系统找不到指定的文件”的解决办法)
  10. 遥感数据集_最新高光谱遥感数据集
  11. Scrum vs Waterfall vs Agile vs Lean vs Kanban
  12. 《统计学习方法》python代码资料
  13. 点云数据集汇总整理(匠心之作,附官方下载地址)
  14. Python数据库编程
  15. 电商项目测试核心内容
  16. 第十一届蓝桥杯 2020年省赛真题 (C/C++ 大学A组) 第一场
  17. AAAI-2021-RE-Progressive Multitask Learning with Controlled Information Flow for Joint Entity and Re
  18. Excel编程环境搭建
  19. Ionic3.x 创建项目中的问题-IonIC start myApp tabs
  20. 目前流行的装修风格_现在最流行的装修风格是什么 装修风格流行趋势是什么...

热门文章

  1. NLP-预训练模型-2019-NLU+NLG:BART【Bert+GPT的泛化Seq2Seq模型】【噪声破坏后的原文本喂给编码器,解码器输出原文本】【噪音方案:文本填充(文本片段用单个掩码替换)】
  2. PS工具栏之【选择工具栏和编辑工具栏】矩形和椭圆的使用技巧
  3. 为什么要用IPv6取代IPv4呢
  4. 本周AI热点回顾:Github私有库无限协作、飞腾适配百度昆仑AI处理器、OpenAI发布神经网络可视化库
  5. 类变量、成员变量、局部变量存放位置
  6. coco数据集的学习和理解
  7. 数据库 | SQL 诊断优化套路包,套路用的对,速度升百倍
  8. Pregel:一个大规模图计算系统
  9. 二极管的直流等效模型
  10. 【一起入门MachineLearning】中科院机器学习第*课-非线性分类:决策树