Java字符由无符号整数表示

Java字符由无符号整数表示,java,types,Java,Types,我遇到了这样一个短语,Java字符类型表示为16位无符号整数。我认为符号只是编译器或解释器处理数据的方式,但操作系统和硬件没有区别。在这种情况下,它应该被视为一个字符,而不是一个数字。那么,将其表示为无符号整数是什么意思呢?这意味着,当转换为int或long时,该值将是无符号的,因此设置的最高有效位不会导致int或long通过符号扩展以负数结束。一般来说,硬件对有符号值和无符号值进行了区分。例如,如果查看英特尔指令集,您将看到有符号乘法和除法以及无符号乘法和除法的指令不同。对于相同的(逐位)输入

我遇到了这样一个短语,Java字符类型表示为16位无符号整数。我认为符号只是编译器或解释器处理数据的方式,但操作系统和硬件没有区别。在这种情况下,它应该被视为一个字符,而不是一个数字。那么,将其表示为无符号整数是什么意思呢?

这意味着,当转换为
int
long
时,该值将是无符号的,因此设置的最高有效位不会导致
int
long
通过符号扩展以负数结束。

一般来说,硬件对有符号值和无符号值进行了区分。例如,如果查看英特尔指令集,您将看到有符号乘法和除法以及无符号乘法和除法的指令不同。对于相同的(逐位)输入,它们给出不同的答案

现在来看
char
的Java示例

的确,
char
在Java中是无符号的,但是。。。惊人地它不需要特别支持无符号算术

Java语言规范规定,当您对
字节
字符
执行算术、按位、移位和比较操作时,首先将操作数提升为
int
(或
long
float
double
,如果需要)。然后使用32位有符号(或任意)指令执行该操作,并生成32位(或任意)结果。例如:

char a = 'a';
char b = 'b';
char something = a + b;           // error!
char something1 = (char)(a + b);  // ok

那么说它被表示为无符号整数是什么意思呢


好的,基本上,它>>可以帮助理解它的确切含义,以及你所说的关于编译器和解释器的内容,而操作系统与它完全无关。好的,它肯定反映在当你将它转换为
int
时发生的事情上,或者用它来计算……我不明白是什么让0到ffff定义为无符号范围。值的范围可以解释为有符号或无符号,对吗?例如,short是16位有符号的,并且这些位在0到ffff的相同范围内。Louis解释的是,当Java将字符解释为数字类型时,它将其解释为无符号。如果它是有符号的范围,则它将是
\u8fff
\u7fff
,即-32768到32767。它是无符号的,所以它从零开始,而不是从负数开始,一直到FFFF,而不是在7FFF停止。路易斯所解释的完全正确,不要误解我,但你在问题中也说了完全相同的话。当你回答了自己的问题时,我不明白的是你不明白的。这也会影响轮班操作员的工作方式和比较。