zoukankan      html  css  js  c++  java
  • Java中基本数据类型byte,short,char,int,long,float,double 取值范围

    部分内容转自:java 彻底理解 byte char short int float long double

     首先说byte:

    这段是摘自jdk中 Byte.java中的源代码:

     1 /**
     2      * A constant holding the minimum value a <code>byte</code> can
     3      * have, -2<sup>7</sup>.
     4      */
     5     public static final byte   MIN_VALUE = -128;
     6 
     7     /**
     8      * A constant holding the maximum value a <code>byte</code> can
     9      * have, 2<sup>7</sup>-1.
    10      */
    11     public static final byte   MAX_VALUE = 127;

    从这里可以看出 byte的取值范围:-128 --- 127;

    从计算机组成原理的角度可以解释:byte在计算机中是占8个字节的 而且byte 是有符号整形 用二进制表示时候最高位为符号位 0代表正数 1代表负数。

    最大值:127      0111 1111 即2的7次方减去1;

    最小值:-128 这个数字曾经困扰我很久, 要知道正数在计算机中是以原码形式存在的,负数在计算机中是以其补码形式存在的,那么一个负数的补码是怎么计算的呢? 就是负数的绝对值的原码转为二进制再按位取反后加1,

    下边这个10和-10为例来介绍的 :10原码:0000 1010   它在计算机中的存储就是 0000 1010, 那么-10呢? 按照前面说的 算除其绝对值为10,转为二进制 0000 1010 按位取反 1111 0101 再加1后:1111 0110,此为-10补码 ,好的,计算机中的1111 0110就是代表-10了。

     我们来看 -128  绝对值128的二进制表示:1000 0000 按位取反 0111 1111 加1后:1000 0000,也就是说 -128在计算机中的表示就是 1000 0000 了, 再来看一下-129 在计算机中的表示,绝对值129的范围已经超出了了byte的位数。

    再有还可以通过

    1 System.out.println(Byte.MAX_VALUE); //最大值
    2 System.out.println(Byte.MIN_VALUE); //最小值

    输出Byte的最大值和最小值。

    综上所述 byte的取值范围只能是:-128 -- 127了  即 负的2的7次方到2的7次方减去1。

    相应的 short 作为16位有符号整形,int作为32位有符号整形,  long 作为64位有符号整形 都可以如上计算出 取值范围

    Short:

    Unicode Character Representations

    The char data type (and therefore the value that a Character object encapsulates) are based on the original Unicode specification, which defined characters as fixed-width 16-bit entities. The Unicode Standard has since been changed to allow for characters whose representation requires more than 16 bits. The range of legal code points is now U+0000 to U+10FFFF, known as Unicode scalar value.

       Character.java中的源代码:

    /**
         * The constant value of this field is the smallest value of type
         * <code>char</code>, <code>'/u0000'</code>.
         *
         * @since   1.0.2
         */
        public static final char   MIN_VALUE = '/u0000';
    
        /**
         * The constant value of this field is the largest value of type
         * <code>char</code>, <code>'/uFFFF'</code>.
         *
         * @since   1.0.2
         */
        public static final char   MAX_VALUE = '/uffff';

     Long:

    float作为32位的浮点型:

    摘自Float.java源码:

    /**
         * A constant holding the largest positive finite value of type
         * <code>float</code>, (2-2<sup>-23</sup>)·2<sup>127</sup>.
         * It is equal to the hexadecimal floating-point literal
         * <code>0x1.fffffeP+127f</code> and also equal to
         * <code>Float.intBitsToFloat(0x7f7fffff)</code>.
         */
        public static final float MAX_VALUE = 3.4028235e+38f; // 0x1.fffffeP+127f
    
        /**
         * A constant holding the smallest positive nonzero value of type
         * <code>float</code>, 2<sup>-149</sup>. It is equal to the
         * hexadecimal floating-point literal <code>0x0.000002P-126f</code>
         * and also equal to <code>Float.intBitsToFloat(0x1)</code>.
         */
        public static final float MIN_VALUE = 1.4e-45f; // 0x0.000002P-126f

    double 作为64为浮点型

    Double.java源码:

     1 /**
     2      * A constant holding the largest positive finite value of type
     3      * <code>double</code>,
     4      * (2-2<sup>-52</sup>)·2<sup>1023</sup>.  It is equal to
     5      * the hexadecimal floating-point literal
     6      * <code>0x1.fffffffffffffP+1023</code> and also equal to
     7      * <code>Double.longBitsToDouble(0x7fefffffffffffffL)</code>.
     8      */
     9     public static final double MAX_VALUE = 1.7976931348623157e+308; // 0x1.fffffffffffffP+1023
    10 
    11     /**
    12      * A constant holding the smallest positive nonzero value of type
    13      * <code>double</code>, 2<sup>-1074</sup>. It is equal to the
    14      * hexadecimal floating-point literal
    15      * <code>0x0.0000000000001P-1022</code> and also equal to
    16      * <code>Double.longBitsToDouble(0x1L)</code>.
    17      */
    18     public static final double MIN_VALUE = 4.9e-324; // 0x0.0000000000001P-1022
  • 相关阅读:
    [NOI2001]炮兵阵地
    POJ 2411 Mondriaan's Dream
    【模板】割点(割顶)
    [Noip2007]Core树网的核
    2018.09.09模拟总结
    2018.09.08模拟总结
    [USACO11JAN]Roads and Planes
    最优贸易
    [USACO08JAN]Telephone Lines
    Calabash(葫芦娃)
  • 原文地址:https://www.cnblogs.com/yongwangzhiqian/p/3966722.html
Copyright © 2011-2022 走看看