java中有哪些基本类型(java中有几种类型)
导语:java面试题: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 = 1270的补码和原码是一样的按照上面补码的求解过程0的原码=00000000→反码11111111 + 1→补码00000000(最高进位丢弃),嗯,也就是说正负0只用一个状态表示。为什么byte最小值是-128?我们已经了解,每一个正数有一个对应的补码表示负数,但是通过上面的分析,我们发现-127~127(包括0也没有重复表示)共255个状态,还有一个状态10000000没有利用,它是多少呢?2.补码减1 得出反码=011111113.反码取反得到原码=10000000=(128)(我们说原码时,并没有提符号位,仅仅是2进制表示)注意补码和原码一致,似乎可以即表示128,也可表示-128,但注意与前面的定义保持一致,也为方便计算机识别处理,首位是1即是负数,因此只能是-128了。本文内容由小馨整理编辑!