int、 long、 float、 double范围(java)

1、刷题时候,经常遇到的问题就是大数处理,那么选择哪个数据类型,其实为了快速解题,仅仅知道对应数据类型占用字节数目以及二进制能表达的数据类型对应的值的正负范围是不够的,因为这只是宏观上的概念,还要知道对应的十进制的正负范围。所以为了不是每次都手动推一遍,究竟是到了十进制的10的多少次方了,决定还是写一个博客,彻底记录这个问题。



2、测试code:

/**
 */
public class Main {
    public static void main(String[] args){
        //Scanner scanner=new Scanner(System.in);//在线笔试
        int iMin=Integer.MIN_VALUE;
        int iMax=Integer.MAX_VALUE;
        long lMin=Long.MIN_VALUE;
        long lMax=Long.MAX_VALUE;
        float fMin=Float.MIN_VALUE;
        float fMax=Float.MAX_VALUE;
        double dMin=Double.MIN_VALUE;
        double dMax=Double.MAX_VALUE;


        System.out.println("--------JDK1.8中数字范围测试----");
        System.out.println("int     最小值的常量:"+iMin); //左边界大概范围:-Math.pow(10,9);  21474 83647
        System.out.println("int     最大值的常量:"+iMax); //右边界大概范围:+Math.pow(10,9);
        System.out.println("long    最小值的常量:"+lMin);//左边界大概范围:-Math.pow(10,17)  9223 37203 68547 75808
        System.out.println("long    最大值的常量:"+lMax);//右边界大概范围:+Math.pow(10,17)
        System.out.println("float   最小正非零值的常数:"+fMin);//左边界大概范围:-Math.pow(10,38)
        System.out.println("float   最大正非零值的常数:"+fMax);//右边界大概范围:+Math.pow(10,38)
        System.out.println("double  最小正非零值的常数:"+dMin);//左边界大概范围:-Math.pow(10,308)
        System.out.println("double  最大正非零值的常数:"+dMax);//右边界大概范围:+Math.pow(10,308)

        //test
        System.out.println("------------------------------");
        float negF=-3.4028235E38F;
        System.out.println("最小float值:"+negF);
        double negD=-1.7976931348623157E308D;
        System.out.println("最小double值:"+negD);
    }
}







3、输出结果:

--------JDK1.8中数字范围测试----
int     最小值的常量:-2147483648
int     最大值的常量:2147483647
long    最小值的常量:-9223372036854775808
long    最大值的常量:9223372036854775807
float   最小正非零值的常数:1.4E-45
float   最大正非零值的常数:3.4028235E38
double  最小正非零值的常数:4.9E-324
double  最大正非零值的常数:1.7976931348623157E308
------------------------------
最小float值:-3.4028235E38
最小double值:-1.7976931348623157E308



4、说明:

Q1:float和double最小值不是负数吗?为什么输出的最小值是个正数的表达式?

A1:查看FLOAT.MIN_VALUE源码,我们知道:输出的最小值本来就是一个正数,这个正数表示的是:float能表示的最小的正数,而这个正数就是:1.4乘以10的-45次方。如果想获取float最小值,可以在正数最大值前面添加负号就可以得到。

贴出FLOAT.MIN_VALUE源码:

 /**
     * A constant holding the smallest positive nonzero value of type
     * {@code float}, 2<sup>-149</sup>. It is equal to the
     * hexadecimal floating-point literal {@code 0x0.000002P-126f}
     * and also equal to {@code Float.intBitsToFloat(0x1)}.
     */
    public static final float MIN_VALUE = 0x0.000002P-126f; // 1.4e-45f

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值