java 徹底理解 byte char short int float long double

來源:互聯網
上載者:User

遇到過很多關於 數實值型別範圍的問題了,在這做一個總結,我們可以從多方面理解不同數實值型別的所能表示的數值範圍

 在這裡我們只談論 java中的數實值型別

 首先說byte:

這段是摘自jdk中 Byte.java中的原始碼:

/**<br /> * A constant holding the minimum value a <code>byte</code> can<br /> * have, -2<sup>7</sup>.<br /> */<br /> public static final byte MIN_VALUE = -128;</p><p> /**<br /> * A constant holding the maximum value a <code>byte</code> can<br /> * have, 2<sup>7</sup>-1.<br /> */<br /> 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的位元。

再有還可以通過

System.out.println(Byte.MAX_VALUE); //最大值<br />System.out.println(Byte.MIN_VALUE); //最小值

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

綜上所述 byte的取值範圍只能是:-128 -- 127了  即 負的2的7次方到2的7次方減去1。

相應的 short 作為16位有符號整形,int作為32位有符號整形,  long 作為64位有符號整形 都可以如上計算出 取值範圍

 

char作為16位無符號整形 其範圍為 0 -- 2的15次方 這無可爭議

 

摘自 Character.java中的原始碼:

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

float作為32位的浮點型:

摘自Float.java源碼:

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

 

double 作為64為浮點型

Double.java源碼:

/**<br /> * A constant holding the largest positive finite value of type<br /> * <code>double</code>,<br /> * (2-2<sup>-52</sup>)·2<sup>1023</sup>. It is equal to<br /> * the hexadecimal floating-point literal<br /> * <code>0x1.fffffffffffffP+1023</code> and also equal to<br /> * <code>Double.longBitsToDouble(0x7fefffffffffffffL)</code>.<br /> */<br /> public static final double MAX_VALUE = 1.7976931348623157e+308; // 0x1.fffffffffffffP+1023</p><p> /**<br /> * A constant holding the smallest positive nonzero value of type<br /> * <code>double</code>, 2<sup>-1074</sup>. It is equal to the<br /> * hexadecimal floating-point literal<br /> * <code>0x0.0000000000001P-1022</code> and also equal to<br /> * <code>Double.longBitsToDouble(0x1L)</code>.<br /> */<br /> public static final double MIN_VALUE = 4.9e-324; // 0x0.0000000000001P-1022

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.