• 小类型向大类型转换


    ------------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】

  • 相关阅读:
    HTML5 程序设计笔记(一)
    前端插件小结
    Android 学习手札(三) 视图(View)
    Python32期【pthon基础 day 3】01 早测试
    Python32期【pthon基础 day 2】04 数据类型1-2
    Python32期【pthon基础 day 2】03 数据类型2
    Python32期【pthon基础 day 2】02 数据类型1
    Python32期【pthon基础 day 2】01 早测试
    Python32期【pthon基础 day 1】03 小作业
    Python32期【pthon基础 day 1】02 注释2
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/6535313.html
Copyright © 2020-2023  润新知