我读到“当一个整数被转换为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和十六进制值之间的关系...... 感谢..
答案 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位,我会得到相同的输出。",你的答案是!(不是):)