与ASCII值相关的查询

时间:2013-07-20 08:54:56

标签: java

我读到“当一个整数被转换为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和十六进制值之间的关系...... 感谢..

3 个答案:

答案 0 :(得分:4)

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

65.25会被截断为65,所以它仍然是'A'。

你在期待什么?

答案 1 :(得分:2)

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

答案 2 :(得分:2)

十进制的

0XAB0041是:

11206721

以二进制形式显示:

101010110000000001000001

所以最后16位, 我们有:0000000001000001 = 65十进制 如果您在this链接中看到ASCII表,则表示“A'

因此,0XAB0041上的char成为'A'

如果你考虑

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

0041由java作为八进制文字,十进制值为4 * 8 + 1 = 33.所以33位小数的ASCII码是!。

因此输出将是:

!

因此,如果你问"如果我自己只考虑铸造的低16位,我会得到相同的输出。",你的答案是!(不是):)