簡體   English   中英

Java中的byte,char,int - 位表示

[英]byte, char, int in Java - bit representation

我對Java中的byte和char感到困惑。 我有以下程序段:

    byte b = 65;
    char c = 65;
    short s = 65;
    System.out.println("b:"+b+" c:"+c+ " s:"+s);  // outputs b:65 c:A s:65

b,c和s的位表示相同,它們都是:: 00000000 01000001。 我的問題是,如果位是相同的,那么它們的行為方式不同 - b為byte,c為char,s為short? 另一個問題是: char c = 65; 為什么這是正確的陳述? 雖然我將int值賦給char,但它不會出錯。

謝謝。

他們的行為如何不同?

參考JLS

整數類型是byte,short,int和long,其值分別為8位,16位,32位和64位二進制補碼整數,以及char,其值為16位無符號整數代表UTF-16代碼單元。

整數類型的值是以下范圍內的整數:

  1. 對於字節,從-128到127(含)

  2. 簡而言之,從-32768到32767,包括在內

  3. 對於int,從-2147483648到2147483647,包括在內

  4. 很長一段時間,從-9223372036854775808到9223372036854775807,包括

  5. 對於char,從'\\ u0000'到'\\ uffff',包括0到65535

另一個區別是它們的包裝類不同: byteBytecharCharactershortShort

char c = 65; 為什么這是正確的陳述?

char ,其值為16位無符號整數,表示UTF-16代碼單元(第3.1節)。

byte被裝箱為Byte

char被裝入Character

short是盒裝到Short

這3個類有3個不同的toString()方法。 這就是為什么他們有不同的顯示器。

然后從intbytecharshort的轉換將自動為您完成,然后將其裝箱到相應的裝箱類。

1)它們的位表示不相同,對於字節為01000001 ,對於short和char為0000000001000001

2)區別在於byte和short是有符號整數,char是16位Unicode字符

3)65不是int,它是常量,如果你嘗試分配一個int,你將得到一個錯誤

   int x = 65;
   char c = x;   <-- error

考慮到數據表示,它們的行為不同,差別在於它們可以在不同的時間間隔內保存值。

至於char,每個字符都有它的整數表示,這就是為什么它是java中的有效語法。

所有原始類型boolean, char, short, int, ... )實際上都是內存中的位數組。

變量的類型僅定義此變量可以取值的范圍:

  • boolean 1位[范圍0-1]
  • char 16位[范圍0到216-1或\\ u0000到\\ uFFFF]
  • byte 8位[范圍-128到127]
  • short 16位[-32768至32767]
  • int 32位[-2147483648至2147483647]
  • ...

char由位或互補的hex,dec,oct nubmer表示。 不要緊。 這就是為什么你可以為它分配一個數字,這個nubmer與該數字的Unicode表示相匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM