2013-07-20 100 views
2

我讀過「將整數轉換爲char時,僅使用其低16位數據;其他部分被忽略」。基於此,我不應該得到'0041'的char值作爲輸出。相反,我得到'A'作爲輸出,它的ASCII值爲65.爲什麼會發生這種情況?與ASCII值相關的查詢

public class practice { 
     public static void main(String[] args) { 
      char ch = (char)0XAB0041; 
      System.out.println(ch); 
      char ch1= (char)65.25; 
      System.out.println(ch1); 
     } 
} 

我會得到相同的輸出,如果我自己只考慮低16位的下方casting.As:

char ch = (char)0041; 
    System.out.println(ch); 

傢伙任何人都可以清楚這個問題,我現在所面臨的理解之間的關係unicode的,ASCII和十六進制值... 謝謝..

+1

你從哪裏讀到的? –

+0

@Thomas Java編程入門第8版 – RDPD

回答

2

十進制0XAB0041是:

11206721 
二進制

,就變成:

101010110000000001000001 

所以服用後16位, 我們:0000000001000001十進制 = 65如果看到ASCII表this鏈接,它是'A'

因此,0XAB0041上鑄造char,成爲'A'

如果考慮

char ch = (char)0041; 
    System.out.println(ch); 

0041採取的Java作爲八進制與十進制值4 * 8 + 1 = 33.So ASCII碼爲33進制就是!

因此輸出將是:

! 

因此,如果你問,你的答案是(不)「如果我自己只考慮低16位的鑄造,我會得到相同的輸出。」! )

+0

我知道0XAB0041中的X代表十六進制。 X之前的X和AB之後的0表示什麼? – RDPD

+0

兩個錯誤:(char)0041是十進制的33,這是'!'。 (char)41 is')' – Ingo

+0

@Ingo非常感謝你! – rahulserver

2

您正在處理0x41這是65(16 * 4 + 1)10進制之間。 'A'對應於ascii 0x41。

4

0x0041是十進制65,它是ASCII'A'。

65.25會被截斷爲65,所以它仍然是'A'。

你在期待什麼?

+0

我是一個初學者,剛剛在unicode,ASCII和hex之間混淆了。 – RDPD