Java基础数据类型知识点
数据类型
基本数据类型范围
序号 | 数据类型 | 字节 | 默认值 | 取值范围 | 举例说明 |
---|---|---|---|---|---|
1 | byte | 1 | 0 | -2^7 ~ 2^7-1 | byte b = 10; |
2 | short | 2 | 0 | -2^15 ~ 2^15-1 | short s = 10; |
3 | int | 4 | 0 | -2^31 ~ 2^31-1 | int i = 10; |
4 | long | 8 | 0L | -2^63 ~ 2^63-1 | long l = 10L; |
5 | float | 4 | 0F | -2^128 ~ 2^128 | float f = 10.0F; |
6 | double | 8 | 0D | -2^1024 ~ 2^1024 | double d = 10.0D; |
7 | char | 2 | \u0000(空) | 0 ~ 2^16-1 | char c = 'c'; |
8 | boolean | 1 | false | true,false | boolean b = false; |
范围说明
整数类型
以byte为例,byte二进制占1个字节,8位数据中,最左侧即最高位是符号位,所以正数的范围为 00000000 ~ 011111111,即 0 ~ 127,而负数的范围为 10000000 ~ 11111111,即 -127 ~ -0,实际中 -0 是没有意义的,计算机中将 10000000 定义为 -128 的补码,因此得到byte的数据类型范围为 -128 ~ 127。其它 short、int、long 数据类型范围同样按此定义。
浮点类型
浮点数是一种 公式化 的表达方式,用来近似表示实数,并且可以在表达范围和表示精度之间进行权衡。通常情况下,浮点数表示为:N = M × r^E。
式子里面r是浮点数阶码的底在计算机中是隐含的,通常情况下r=2。 E 和 M 都是带符号的定点数, E 被称之为阶码,M 被称之为尾数,而r被称之为阶码的基数。
其中E的大小越大,能表示的数范围越大,M的位数越大,数的有效精度越高。
IEEE 754标准采用的浮点数的格式:
S为数符,表示浮点数的符号,E为阶码部分,用移码【不管正负数,只要将其补码的符号位取反即可】表示,M是尾数部分,用原码表示,数字在计算机中是以二进制补码方式存储。
IEEE 754标准规定常用的浮点数格式有短浮点数(单精度、float)、长浮点数(双精度、double型)、临时浮点数。
float数符占1位;阶码占8位,以2为底,用移码表示,阶码偏置值为127(阶码全1表示无限大,E的范围是1~254,空出全0表示非规格化数);尾数部分为23位。
double数符占1位;阶码占11位,以2为底,用移码表示,阶码偏置值为1023(阶码全1表示无限大,E的范围是1~2046,空出全0表示非规格化数);尾数部分为52位。
浮点数的取值范围主要看指数部分
float的指数部分占8位(2^8),由于是有符号型,所以得到对应的指数范围-128~128。对应的取值范围为:-2^128 ~ 2^128。
double的指数部分占11位(2^11),由于是有符号型,所以得到对应的指数范围-1024~1024。对应的取值范围为:-2^1024 ~ 2^1024。
浮点数的精度主要看尾数位
float的尾数位是23位,对应7~8位十进制数,所以有效数字有的编译器是7位,也有的是8位
double的尾数位是52位,对应15~16位十进制数,所以有效数字有的编译器是15位
数值类型转换
实线箭头表示无信息丢失的转换,虚线箭头表示可能有精度损失的转换。
参考:
https://blog.csdn.net/alongbigbig/article/details/115027153
https://blog.csdn.net/qq_36915078/article/details/106019023