java类型和范围值

在java类型中存在三种类型,分别为:简单类型,引用类型以及空类型。同样对应的有三种数据值,简单值,引用值以及null。其中null是一种特殊的类型。由于null的类型没有名字,所以不能声明一个变量是空类型的,同样不能将变量类型转化为空类型。
数字类型包括整数类型和浮点数类型。其中整数类型包括byte,short,int,long.他们分别是8,16,32,64位有符号二进制补码表示的整数。char也是一种数字类型,他是16位无符号整数
浮点数包括float和double.前者的值包括32位IEEE754浮点数。后者的值包括64位IEEE754浮点数。
对于byte类型   类型值范围是 -128-127之间  二进制形式为 10000000  到 01111111
对于short类型  类型值范围是 -32768-32767  二进制形式为 1000000000000000 到 0111111111111111 
对于int类型    类型值范围是  -2147483648-2147483647  二进制形式为 1(31个0) 到 0(31个1)
对于long类型   类型值范围是 -9223372036854775808到9223372036854775807887 二进制形式为1(63个0)到0(63个1)

对于char类型   是从"\0000"到"\ffff"的区间 即从0到65536

以上的二进制表示形式全为补码。

对于float 和double,由于他们是含有小数位的,所以标准是不同的,他们符合IEEE 754标准。

他们的表示方法如图所示

对于float

符号位S(1bit)

指数E(8bit)

尾数位M(23bit)

对于符号位来说,他只有0和1两种结果。指数为23-30位共8位为指数位,这里指数的底数规定为2(取值范围:0~255)。这一部分的最终结果格式为: 2 E127  ,即范围-127~128。另外,标准中,还规定了,当指数位8位全0或全1的时候,浮点数为非正规形式,所以指数位真正范围为:-126~127。对于尾数位而言形式为1.M或0.M,至于什么时候是1,什么时候是0,则由指数和尾数共同决定。 小数部分最高有效位是1的数被称为正规(规格化)形式。小数部分最高有效位是0的数被称为非正规(非规格化)形式,其他情况是特殊值。 最终float的值 = (1) S (2 E127 )(1.M) 

8388608 也就是说对于位数最大的精度表示是1.8388608表示。那么当他进行与2^N进行相乘是最多精度也就是只有8位。

对于double而言他的表示为以下

符号位S(1bit)

指数E(11bit)

尾数位M(52bit)

 计算方式和float相同,唯一的就是精度区别。他可以有2^52为16位。所以他的最高精度就是16位。

由于float的精度只有最高8位。所以以下代码会产生不同的结果。精度丢失。

public static void main(String[] args) {
int i=1234567899;
float d =i;
System.out.println("float转化为整形:"+(int)d);
System.out.println(i-(int)d);

}

运行结果:


从上面可以看出。对于1234567890 他在保留的时候只截取了1234567 后面的采用四舍五入。然后指数进行靠拢算的近视值。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值