我一直在尋找在Javadoc for the CharSequence接口,通過String
,StringBufer
執行和其他幾個人,更確切地說,在chars()
方法,以及Javadoc中說「零延伸」是什麼意思?
返回流INT零擴展,從這個char值 序列。
現在,我知道它返回的值爲int
,而那int
that can be cast to char
。但是「零延伸」是什麼意思?
我一直在尋找在Javadoc for the CharSequence接口,通過String
,StringBufer
執行和其他幾個人,更確切地說,在chars()
方法,以及Javadoc中說「零延伸」是什麼意思?
返回流INT零擴展,從這個char值 序列。
現在,我知道它返回的值爲int
,而那int
that can be cast to char
。但是「零延伸」是什麼意思?
Int是一個32位的值,char是一個16位的值。零擴展只意味着int中的高階「未使用」位是零。
我猜測它被記錄是因爲,以一種方式看,該操作將char
值視爲一個16位整數,並且在從整數轉換爲較大整數時,庫方法的用戶這必須知道如何處理標誌。
對於那些不知道的,有符號的整數值將其最高位保留爲'符號位'。如果它是1,則該數字是否定的。當轉換爲一個更大的整數時,如果最高位被複制到新值的所有'額外'位中,我們說轉換是「符號擴展」。只有這樣做,新的整數才具有與較小的有符號整數相同的有符號數值。如果較小的整數值是無符號的,則最高位表示與所有其他位一樣的值,並且只有沒有符號擴展才會使值相同。
Java語言沒有無符號整數作爲數據類型,所以沒有符號擴展的轉換可能被認爲是不尋常的。
如果有一個常量代表特定字符的(帶符號)整數值,那麼在轉換爲32位整數後,如果轉換包含符號擴展名,則該常量將仍然是準確的。因此,瞭解給定的轉換如何處理原始值是非常重要的。
可能lsB和lsB + 1是char值,其他(msB,msB-1)是零,因此它們等於整數或任何基本整數需要等於的字符值 –
我的猜測是通過將最高有效16位設置爲0,將16位字符變成32位整數。 –
char'bb'被映射到int'00bb'。有趣的是,他們沒有CharStream等。提供所有原始版本的流和函數真的很煩人,他們停在'int,long,double'。 – ZhongYu