2

我读到“当将整数转换为 char 时,仅使用其低 16 位数据;另一部分被忽略”。基于此,我不应该得到 '0041' 的 char 值作为输出。相反,我得到 'A' 作为输出,其 ASCII 值为 65。为什么会发生这种情况?

  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 位进行转换,我会得到相同的输出吗?如下:

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

伙计们,任何人都可以解决我在理解 unicode、ASCII 和十六进制值之间的关系时面临的这个问题......谢谢..

4

3 回答 3

4

0x0041是十进制 65,即 ASCII 'A'。

65.25将被截断为 65,所以它仍然是“A”。

你期待什么?

于 2013-07-20T08:58:03.913 回答
2

您正在处理0x41十进制系统中的 65(16 * 4 + 1) 。“A”对应于 ascii 0x41。

于 2013-07-20T08:57:26.180 回答
2

0XAB0041十进制是:

11206721

在二进制中,它变为:

101010110000000001000001

所以取最后 16 位,我们有:0000000001000001=65十进制 如果您在链接中看到 ASCII 表,它是用于“A”

因此, 0XAB0041在转换为 时char,变为'A'

如果你考虑

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

0041 被 java 当作八进制文字,十进制值为 4*8+1=33。所以 33 十进制的 ASCII 码是!。

因此输出将是:

!

因此,如果您问“如果我自己只考虑低 16 位进行转换,我会得到相同的输出吗?”,您的答案是!(不是):)

于 2013-07-20T09:13:20.987 回答