java基本數據類型取值范圍分析


關於java中基本取值范圍許多人都了解,可是都是如何計算出來的呢?

首先把查到的基本類型取值范圍展示一下:

 

那么問題來了:例如byte的取值范圍如何計算出來的呢?

  按照我們初學者的理解1byte=8bit,也就是說1個字節可以用8位二進制數表示。那么取值范圍怎么表示呢?

  對於人類來說,我覺得十進制才是我能理解的范疇,所以取值范圍我就轉化為十進制吧;注(因為第一位為

  符號位 0正1負)所以取值范圍為:11111111~01111111即-127~127。

  我擦說好的-128呢?

  我查看網上的許多人的計算方法總結如下:

  1、因為1byte表示256個數(用一個字節(8位)表示出來(2^8=256)),所以有人將其拆開正負各一半,即

    -128~127(這個是127而不是128是因為0也是正數啊,所以划分后128變127了)。

  2、這個就專業知識要一些了。其實,1111 1111表示的是-1,而不是-128;
    首先,因為要表示出負數,所以它的最高位是符號位。0表示正數,1表示負數;如:
    127是0111 1111這樣表示的。-128是1000 0000這樣表示的。127后面是-128,最

    大的正數加下來是最小的負數。這就跟鍾表一樣,12點鍾后面是1點中鍾一樣。
    因為它是用補碼的編碼方式。

    (下面的看不懂可以直接跳過,或者百度了解之后再看)
    正數的補碼就是它的原碼,也就是單純的二進制數。負數的話,看下面例子:
    1111 1111這個二進制串,首先它最高位是1,明確他是個負數。
    那么其余位是111 1111,按位取反得到:000 0000,再加1就是:000 0001
    也就是1,再加上符號位。最終結果是-1。

  3、這個是我比較理解的解釋。首先我們對計算機的二進制麻木不堪,還是十進制好一些。

    你可以這樣想,第一位符號位我們暫時不去考慮,那么剩下的七位組成的最小值為多少?

    就是000,0000,這時將符號位添加1000,0000不就是最小的數了(因為1是負號啊),

    這時轉化為十進制得出-128。

歡迎各位大神能提出更好的理解方案

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM