一、数据类型介绍
Java的数据类型分为:基本数据类型和引用数据类型。
基本数据类型分为:
整数型:byte(字节型)、short(短整型)、int(整型)、long(长整型)
浮点型:float(单精度)、double(双精度)
char(字符型)
boolean(布尔型)、
引用数据类型:对象等等。
二、基本数据类型如何对应到计算机底层
1.基本数据类型在计算机所占字节:
byte(1)、short(2)、int(4)、long(8)、char(2)、boolean(1)、float(4)、double(8)
2.基本数据类型如何转为计算机所需的二进制(补码)
(1)整数型:(也就是不同进制数向二进制的转换,一般是十进制和二进制的转换,具体规则网上都有,这里举例说明)
十进制数(int 10)——二进制数(0【符号位】1010)——反码(01010)——补码(01010)——底层存储(00000000 00000000 00000000 00001010)
十进制数(int -10)——对其相反数(10)的补码取反加一(10110)——底层存储(11111111 11111111 11111111 11110110)
(2)字符型:(计算机中所有的数据都是以二进制数存储和运算的,为了规定字母、各种字符等使用哪个二进制数表示,美国推出了ASCII编码)
也就是说,字符型数据在转为二进制时,直接依据码表进行,Java中使用Unicode来表示字符。
补充说明:int 1和byte 1和char '1'的区别(可以看出,计算机底层是依靠存储大小来判断数据类型的)
十进制数(int 1)——二进制数(0【符号位】1)——反码(01)——补码(01)——底层存储(00000000 00000000 00000000 00000001)
十进制数(byte 1)——二进制数(0【符号位】1)——反码(01)——补码(01)——底层存储(00000001)
char '1'——十进制数(49)——二进制数(00110001)——底层存储(00000000 00110001)
补充:事实上,Java会对byte、short、char型默认强转为int型,也就是会以4个字节(32位)进行存储(正数左补0,负数左补1)——这个默认强转一般发生在运算时,比如(byte)1+(byte)1,而不是说Java中所有的byte、short、char都是4个字节存储
(3)布尔型:(false的序号为0,true的类型为1)
false——底层存储(00000000)
(4)浮点型(也称为实型,其十进制表现形式由0-9和小数点组成,其指数形式是由十进制数、阶码标志(e或E)、阶码(只能为整数,可以带符号))
a.底层存储情况
单精度(4字节)(指数偏移量127):符号域(1)+指数域(8)+小数域(23)
双精度(8字节)(指数偏移量1023):符号域(1)+指数域(11)+小数域(52)
指数偏移量解释:以单精度为例,其指数域为8,可表示数字范围为0-255,但有时指数可能为负,这里我们不以0和1来确定政府,而是使用指数域的数字去减去指数偏移量
小数域:小数点左侧必须为1(也就是1.xxxx,小数点前只能有1,因此往小数域进行保存时会省略这个1,同时不足位右补0),比如单精度的二进制数1001.101进行存储时,不能以10.01101 ×2^2进行存储,
必须以1.001101 ×2^3进行存储,所以最终存入小数域的为00110100 00000000 0000000
b.具体转换方法,以百度百科的float9.625为例
整数部分:9——二进制1001
小数部分:0.625——二进制101(具体转换规则,网上都有)
所以float9.625的二进制为1001.101,其科学表示方式为1.001101*10^3,二进制存储为0【符号域】0000001 1【指数域】0011010 00000000 00000000 00000000 00000000 00000000 00000000【小数域】
三、引用类型如何对应到计算机底层
梳理清楚之后再更新。