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

 

java 徹底理解 byte char short int float long double(轉載) (2011-02-27 15:19:31)

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

 在這裏我們只談論 java中的數值類型

 首先說byte:

這段是摘自jdk中 Byte.java中的源代碼:

view plaincopy to clipboardprint?
  
    public static final byte   MIN_VALUE = -128;  
  
      
    public static final byte   MAX_VALUE = 127;  
      public static final byte   MIN_VALUE = -128;           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的位數。

再有還可以通過

view plaincopy to clipboardprint?
System.out.println(Byte.MAX_VALUE); //最大值  
        System.out.println(Byte.MIN_VALUE); //最小值  
 System.out.println(Byte.MAX_VALUE); //最大值                 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中的源代碼:

view plaincopy to clipboardprint?
  
    public static final char   MIN_VALUE = '\u0000';  
  
      
    public static final char   MAX_VALUE = '\uffff';  
      public static final char   MIN_VALUE = '\u0000';           public static final char   MAX_VALUE = '\uffff';

float作爲32位的浮點型:

摘自Float.java源碼:

view plaincopy to clipboardprint?
  
    public static final float MAX_VALUE = 3.4028235e+38f; // 0x1.fffffeP+127f  
  
      
    public static final float MIN_VALUE = 1.4e-45f; // 0x0.000002P-126f  
      public static final float MAX_VALUE = 3.4028235e+38f; // 0x1.fffffeP+127f           public static final float MIN_VALUE = 1.4e-45f; // 0x0.000002P-126f

double 作爲64爲浮點型

Double.java源碼:

view plaincopy to clipboardprint?
  
    public static final double MAX_VALUE = 1.7976931348623157e+308; // 0x1.fffffffffffffP+1023  
  
      
    public static final double MIN_VALUE = 4.9e-324; // 0x0.0000000000001P-1022  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章