2017-02-11 45 views
3

我一直在尋找在Javadoc for the CharSequence接口,通過StringStringBufer執行和其他幾個人,更確切地說,在chars()方法,以及Javadoc中說「零延伸」是什麼意思?

返回流INT零擴展,從這個char值 序列。

現在,我知道它返回的值爲int,而那int that can be cast to char。但是「零延伸」是什麼意思?

+0

可能lsB和lsB + 1是char值,其他(msB,msB-1)是零,因此它們等於整數或任何基本整數需要等於的字符值 –

+3

我的猜測是通過將最高有效16位設置爲0,將16位字符變成32位整數。 –

+1

char'bb'被映射到int'00bb'。有趣的是,他們沒有CharStream等。提供所有原始版本的流和函數真的很煩人,他們停在'int,long,double'。 – ZhongYu

回答

6

Int是一個32位的值,char是一個16位的值。零擴展只意味着int中的高階「未使用」位是零。

我猜測它被記錄是因爲,以一種方式看,該操作將char值視爲一個16位整數,並且在從整數轉換爲較大整數時,庫方法的用戶這必須知道如何處理標誌。

對於那些不知道的,有符號的整數值將其最高位保留爲'符號位'。如果它是1,則該數字是否定的。當轉換爲一個更大的整數時,如果最高位被複制到新值的所有'額外'位中,我們說轉換是「符號擴展」。只有這樣做,新的整數才具有與較小的有符號整數相同的有符號數值。如果較小的整數值是無符號的,則最高位表示與所有其他位一樣的值,並且只有沒有符號擴展才會使值相同。

Java語言沒有無符號整數作爲數據類型,所以沒有符號擴展的轉換可能被認爲是不尋常的。

如果有一個常量代表特定字符的(帶符號)整數值,那麼在轉換爲32位整數後,如果轉換包含符號擴展名,則該常量將仍然是準確的。因此,瞭解給定的轉換如何處理原始值是非常重要的。