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

如上图: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

双精度double

如:
| 十进制 | 二进制 | 二进制科学计数 |
|---|---|---|
| 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位的部分精度。

浙公网安备 33010602011771号