小类型向大类型转换

------------siwuxie095

   

   

   

   

在Java数值运算中,经常会出现不同的类型的数据相互转换的现象。

   

   

b1+10 赋值给 b2,Java默认整数运算是 int 类型运算,即结果是 int 类型

因此 b1+10 的结果会自动转换为 int 类型,当 int 类型数据向小类型:byte

中存储时需要进行类型转换,否则会报错

   

   

   

   

如:

   

package com.siwuxie095.test;

   

public class Test09 {

   

public static void main(String[] args) {

int i=-2;

long l=i;//小类型转大类型,符号位自动扩展

//调用包装类的方法,打印二进制的值

System.out.println(i+":"+Integer.toBinaryString(i));

System.out.println(l+":"+Long.toBinaryString(l));

}

   

}

   

   

Eclipse中:

   

   

   

运行一览:

   

   

   

   

   

   

小类型向大类型转换一般情况下是安全的。

当小类型的精度高于大类型时要注意精度丢失的隐患。

   

1)int类型转换为float类型:

int类型(32位)的精度是31位,其32位中最高位是符号位,剩下31位是尾数,

用来存数据,而float类型(32位)的尾数只有23位,即精度只有23

   

当int类型转换为float类型时虽然不会丢失数据,但有可能丢失精度

   

如:

   

package com.siwuxie095.test;

   

public class Test10 {

   

public static void main(String[] args) {

// i 赋值7位十六进制的值,即 28位二进制值

//超出float尾数23位的范围,尾数不够,精度丢失

int i=0x1000001;

float f=i;

//调用包装类方法,打印二进制和十进制的值

System.out.println(Integer.toBinaryString(i)+":"+i);

//Float包装类没有toBinaryString()方法

//因此依然用Integer中的方法,不过要注意类型转换

System.out.println(Integer.toBinaryString((int)f)+":"+f);

}

   

}

   

   

Eclipse中:

   

   

   

运行一览:

显然:float丢失了二进制最后一位的值:1,同时十进制也丢失了最后一位

(注意:float的十进制值使用了科学计数法)

   

   

   

   

2)long类型转换为double类型:

long类型(64位)的精度是63位,其64位中最高位是符号位,剩下63位是尾数,

用来存数据,而double类型(64位)的尾数只有52位,即精度只有52

   

long类型转换为double类型时虽然不会丢失数据,但有可能丢失精度

   

如:

   

package com.siwuxie095.test;

   

public class Test11 {

   

public static void main(String[] args) {

// l 赋值14位十六进制的值,即 56位二进制值

//超出double尾数52位的范围,尾数不够,精度丢失

long l=0x20000000000001L;

double d=l;

//调用包装类方法,打印二进制和十进制的值

System.out.println(Long.toBinaryString(l)+":"+l);

//Double包装类没有toBinaryString()方法

//因此依然用Long中的方法,不过要注意类型转换

System.out.println(Long.toBinaryString((long)d)+":"+d);

}

   

}

   

   

Eclipse中:

   

   

   

运行一览:

同样:double丢失了二进制最后一位的值:1,同时十进制也丢失了最后一位

(注意:double的十进制值使用了科学计数法)

   

   

   

   

   

【made by siwuxie095】

原文地址:https://www.cnblogs.com/siwuxie095/p/6535313.html