2013-07-20 4 views
2

Я прочитал, что «Когда целое число передается в символ, используются только его младшие 16 бит данных, а другая часть игнорируется». Исходя из этого, я не должен получать значение char для '0041' как output.Instead я получаю '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); 

Ребята может кто-нибудь очистить эту проблему, я обращенную в понимании отношения между юникод, ASCII, и шестнадцатеричные значения ... Спасибо ..

+1

где вы это читали? –

+0

@Thomas Intro to Java Programming 8th Edition – RDPD

ответ

2

0XAB0041 в десятичной системе счисления является:

11206721 

в двоичной системе, она становится:

101010110000000001000001 

Так что, последние 16 бит, мы имеем: 0000000001000001 = 65 в десятичной Если вы видите ASCII таблица в this ссылка, это для 'A'

Следовательно, 0XAB0041 на литье в char, становится 'A'

Если вы считаете

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

0041 принимается Явы как восьмеричные буквального с десятичным значением 4 * 8 + 1 = 33.So код ASCII для 33 десятичного!.

Следовательно, на выходе будет:

! 

Поэтому, если вы спросите, ваш ответ (нет) «Будет ли я получить тот же результат, если я сам рассматривать только младшие 16 бит для литья.»:)

+0

Я понимаю X в 0XAB0041 означает шестнадцатеричный. Что означает 0 перед X и AB после X? – RDPD

+0

Две ошибки: (char) 0041 - это десятичная цифра 33, и это «!». (char) 41 is ')' – Ingo

+0

@Ingo большое спасибо !! – rahulserver

2

Вы имеете дело с 0x41, который 65 (16 * 4 + 1) в десятичной системе. «A» соответствует ascii 0x41.

4

0x0041 - это десятичная цифра 65, которая является ASCII 'A'.

65.25 будет усечен до 65, поэтому он по-прежнему «A».

Что вы ожидали?

+0

Я новичок, просто запутался между unicode, ASCII и hex. – RDPD

Смежные вопросы