网站首页 > java教程 正文
这是一道java基础题,基本类型可以说是java中的基础中的基础,其中占多少字节对理解基础类型的最大值和最小值很有帮助。
如上图所示,java一共有8基本类型,每种类型都有相对应的包装器类型。
这里再给普及下bit,byte和字符的相关知识
bit就是位,也叫比特位,是计算机表示数据最小的单位,计算机数据都是由二进制的001101这种表示的,一个0,1就可以看作是1位
byte就是字节,是计算机中bai 数据处理 的基本单位,习惯上用大写 B 来表示,1B(byte,字节)= 8bit(位)
字符:是指计算机中使用的字母、数字、字和符号
再来理解最大值最小值
那么,为什么byte的最小值是-128次,而最大值是127?最小值为什么最大值多一个,而非对称的相同
通过上文,我们知道byte类型是8bit表示,那么可以表达的状态就有2^8=256个,如果表示无符号整数可以表达最小2进制00000000到最大2进制11111111(=255)共256个数字。
但是JAVA中整型都是有符号,区分就看第一个bit位,第一个bit如果是0则是正数,如果为1则是负数。看到这里就有疑问了,如果第一个bit位表示符号,那么剩下的7位能表示的范围只能是0到2^7-1=127了,岂不是全部数据范围就是-127~127(包括0)共255个数字,先前我们说了,8bit可以表达256个状态,怎么少了一个呢?
原来正0(00000000)和负0(100000000)都是0,计算意义上看也就是重复表达同样的意义,浪费了一个状态表示。为了不浪费资源,尽可能多的存储数据范围,先贤发明了补码表示负数,即一个负数可以用对应的正数的补码表示,而补码=(正数)原码取反(=反码)+1
现在我们用定义一个byte变量值是-127,内存如何存储呢?即求补码
1.127的2进制原码=01111111,
2.求反码=源码取反=10000000
3.反码加1后变成10000001,这就是-127的2进制表示
OK,现在反过来看,计算机指令看到一个byte类型变量值是10000001,怎么得到-127呢?
就是上面求补码的逆向过程,
1.发现第一bit位是1,知道这是补码,是负数
2.补码减1 得出反码=10000000
3.反码取反得到原码=01111111,这就是正数127的2进制表示
4.因此10000001的值就是-127
接下来继续解释:
- byte的最大值为什么是127?因为第一个bit是符号位,那么正数最大只能是01111111=2^7 - 1 = 127
- 0的补码和原码是一样的按照上面补码的求解过程0的原码=00000000→反码11111111 + 1→补码00000000(最高进位丢弃),嗯,也就是说正负0只用一个状态表示。
- 为什么byte最小值是-128?我们已经了解,每一个正数有一个对应的补码表示负数,但是通过上面的分析,我们发现-127~127(包括0也没有重复表示)共255个状态,还有一个状态10000000没有利用,它是多少呢?2.补码减1 得出反码=011111113.反码取反得到原码=10000000=(128)(我们说原码时,并没有提符号位,仅仅是2进制表示)注意补码和原码一致,似乎可以即表示128,也可表示-128,但注意与前面的定义保持一致,也为方便计算机识别处理,首位是1即是负数,因此只能是-128了。
猜你喜欢
- 2024-11-17 java基本数据类型四类八种,快来看看
- 2024-11-17 Java,基本类型和引用类型,强引用、软引用、弱引用、虚引用
- 2024-11-17 Java基本数据类型(java基本数据类型和引用数据类型)
- 2024-11-17 三石说:java基础之 基本数类型(java基本类型数据)
- 2024-11-17 java中基本类型_boolean(java中基本类型的字节数)
- 2024-11-17 Java语言提供了八种基本类型(java语言的八种基本类型)
- 2024-11-17 java基本类型部分理解(java基本类型部分理解是什么)
- 2024-11-17 Java数据类型系列之八大基本数据类型
- 2024-11-17 Java 里的基本类型和引用类型(java 里的基本类型和引用类型一样吗)
- 2024-11-17 java基础-8种基本类型介绍(java有几种基础类型)
你 发表评论:
欢迎- 最近发表
-
- 你真的会用 Java 中的线程池吗?多个企业级线程池工具类封装实践
- 线程池的实现原理、优点与风险、以及四种线程池实现
- Java线程池ThreadPoolExecutor实现原理剖析
- 深入分析线程池的实现原理(线程池是干嘛的)
- 一文搞懂JAVA线程池工作原理(java线程池的工作流程)
- Java线程池的工作原理(java线程池的实现原理)
- 5分钟读懂C#中TcpClient、TcpListener和Socket三个类的角色
- JVM对象的创建过程(jvm运行过程中创建的对象一般存放在方法区)
- 对象组成与Java内存模型JMM分析(java对象在内存中存储的结构)
- JVM对象内存分配详细过程(栈上分配->TLAB->老年代->Eden区)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)