java基础数据类型

java基础数据类型

java中数据类型分为两种,一种为基础数据类型,另外一种为引用数据类型。

基本数据类型又分为整数型、浮点型、字符型和布尔型。


一、基础数据类型分类

型别 类型
整数型 byte short int long
浮点型 float double
字符型 char
布尔型 boolean

二、基础数据类型

类型 关键字 内存占用 取值范围
字节型 byte 1个字节 \(-2^7\)~\(2^7-1\) (\(-128\)~\(-127\))
短整型 short 2个字节 \(-2^{15}\)~\(2^{15}-1\) (\(-32768\)~\(32767\))
整型 int 4个字节 \(-2^{31}\)~\(2^{31}-1\)
长整型 long 8个字节 \(-2^{63}\)~\(2^{63}-1\)
单精度浮点数 float 4个字节 3.402823e+38 ~ 1.401298e-45
双精度浮点数 double 8个字节 1.797693e+308~ 4.9000000e-324
字符型 char 2个字节 \(0\)~\(2^{16}-1\) (0-65535)
布尔类型 boolean 1个字节 true,false

java中的默认类型:整数类型是int 、浮点类型是double

浮点型可能只是近似值,并非精确值,不能用作货币计算。

float数据范围比long更广泛,原因是浮点型是科学计数法,所以字节数和范围并没有必然关系。

三、存储方式

byte

image-20200809144930002

如上图:byte共一个字节(即8位),0-6位表示数字,第七位表示符号。所以取值范围就是\(-2^7\)~\(2^7-1\)(0也是一种所以要减一) ,short、int、long、同理。

char

char是两个字节,共16位,因为没有符号位,所以取值范围就是\(0\)~\(2^{16}-1\)

boolean

布尔类型只有两种,即0和1,但是因为计算机处理数据的最小单位是1个字节,所以true实际表示为 0000 0001,false表示为 0000 0000。

float和double

浮点型的存储方式是按照科学计数法进行存储的,不论是float还是double在存储方式上都是遵从IEEE的规范的,float遵从的是IEEE R32.24 ,而double 遵从的是R64.53。不管是单精度还是双精度,在存储中都分为三个部分:

  • 符号位:0代表正,1代表负

  • 指数位:用于存储科学计数法中的指数数据,并且要加上偏移量

  • 位数部分

单精度float

image-20200809182831855

双精度double

image-20200809183021268

如:

十进制 二进制 二进制科学计数
8.25 1000.01 \(1.00001*2^3\)
25.625 11001.101 \(1.1001101*2^4\)

拿25.625举例:

尾数位:由于小数点前的1不需要存储,所以得到尾数 1001 1010 0000 0000 0000 000

指数位:float指数位为8,由于指数也分正负,所以指数的范围是-127~128,又因为指数位是没有单据的符号位的,所以 0000 0000 就对应-127,1111 1111 就对应128 ,因此在换算过程中,指数位等于 \(4+127=131\)转化为二进制 10000011

符号位:正数符号位为 0

所以25.625在计算机底层存储的结构为 0 10000011 10011010000000000000000

同理8.25:尾数位 0000 1000 0000 0000 0000 000;指数位 1000 0010;符号位 0

所以8.25在计算机底层存储的结构为 0 10000010 00001000000000000000000

这就是很好解释了为什么float内存占用比long少,但是表示范围却比long大的原因

float可以保证十进制科学计数法小数点后6位有效精度和第7位的部分精度

double可以保证十进制科学计数法小数点后15位有效精度和第16位的部分精度。

posted @ 2020-08-07 13:08  ihyb  阅读(187)  评论(0)    收藏  举报