(java)基本数据类型范围详解
(Java)基本数据类型范围详解
个人感觉基础很重要,之前也在笔记本上做了相关的笔记,但是还是容易忘掉原理,每次还得花点时间想一下,这次就详细的解释一下,方便自己以后复习以及查看
Java的基本数据类型可以分为四个大类,整数型,浮点型,字符型,布尔型
整数型(从小到大):byte,short,int,long
浮点型(从小到大):float,double
字符型:char
布尔型:boolean
整数型
byte
数值范围为一个字节
-128~127
原理:一个字节有八位,除去第一个为符号位,所以为27,至于正数为什么要减一,是因为27的含义是有2^7种可能,映射到数值上就是1~128,但是正数是从0开始,故减一,同理,负数不包括零,故不用减一
short
数值范围为两个字节
原理同上,后不再叙述
int
数值范围为四个字节
long
数值范围为八个字节
浮点型
float
占四个字节,为什么不说数值范围为四个字节呢?因为浮点型采用的是科学计数法
float为单精度浮点型
1bit表示符号,8bit表示指数,23bit表示小数
(转载作者:Boss呱呱 链接:https://www.zhihu.com/question/46432979/answer/221485161 来源: 知乎)
需要注意的是指数可能是负数,也有可能是正数,即指数是有符号整数,而有符号整数的计算是比无符号整数麻烦的。所以为了减少不必要的麻烦,在实际存储指数的时候,需要把指数转换成无符号整数。那么怎么转换呢?
注意到float的指数部分是8位,IEEE规定这个指数的取值范围是 -126到+127(详见下文),为了消除负数带来的实际计算上的影响(比如比较大小,加减法等),可以在实际存储的时候,给指数做一个简单的映射,加上一个偏移量,比如float的指数偏移量为127,这样就不会有负数出现了。
比如
指数如果是6,则实际存储的是6+127=133,即把133转换为二进制之后再存储。
指数如果是-3,则实际存储的是-3+127=124,即把124转换为二进制之后再存储。
当我们需要计算实际代表的十进制数的时候,再把指数减去偏移量即可。
float的精度为2^24=16777216,也就是说float最大的精度为8位,但是完全可以表示的精度是7位,至于为什么是24次方,不是float只有23个小数位嘛?
这就涉及到隐含以一开头了
(转载于 https://blog.****.net/liu_jiachen/article/details/100138857)
double
double为双精度浮点数,占8个字节
1bit符号位,11bit指数位,52bit指数位
原理同float
double的精度最大能表示17位,但是能完全表示16位
说到这里我们就发现,float的四字节能表示的数值范围超过了long八字节表示的范围,由此我们可以得出结论,数值范围和字节数不一定相关
字符型
char
char占两个字节
嗯,这个没有什么说的。。。
布尔型
boolean
boolean占一个字节。。。