char c =(char)-98如何;作品?

时间:2013-12-09 07:57:31

标签: java primitive-types

我想知道以下代码行是如何工作的?

char c = (char) -98;

据我所知,所有签名的号码都以 2的补码形式存储。因此-98将存储在 2的补充表单中。所以,如果你输入它成为char。这种类型的转换是如何由JVM完成的?

如果我错了,请纠正我。

2 个答案:

答案 0 :(得分:7)

当你写:

char c = (char) -98;

就像写 1

一样

char c = 65438;

[因为65438 = 2^16 - 98]

明确int转换为char时,将删除前16个


1 -98 in 2的补码是

11111111111111111111111110011110

char的转换只保留16位:

1111111110011110

此值代表65438 ..

更多阅读:

答案 1 :(得分:2)

来自文档:

  

char:char数据类型是一个16位Unicode字符。它的最小值为'\ u0000'(或0),最大值为'\ uffff'(或65,535(含))。

Source

它们只是16位无符号整数。

人们报告说,如果char > 65535,结果为char % 65536,那么我认为您的char c将是-98 % 65536,这将导致65536 - 98 = 65438

无论如何要100%确定,你为什么不试试呢?

<强>更新

我看到你想知道System.out.println(char)(例如)的输出是什么。

  

char和String类型的文字可以包含任何Unicode(UTF-16)字符

Source

因此,System.out.println((char)65438)等同于System.out.println('\uFF9E'),通过对UTF-16编码表(source)进行查找,它是HALFWIDTH KATAKANA VOICED SOUND MARK。仅当字体支持此字符时才会打印,其中一种字体为Arial Unicode MS