Java字符由无符号整数表示
我遇到了这样一个短语,Java字符类型表示为16位无符号整数。我认为符号只是编译器或解释器处理数据的方式,但操作系统和硬件没有区别。在这种情况下,它应该被视为一个字符,而不是一个数字。那么,将其表示为无符号整数是什么意思呢?这意味着,当转换为Java字符由无符号整数表示,java,types,Java,Types,我遇到了这样一个短语,Java字符类型表示为16位无符号整数。我认为符号只是编译器或解释器处理数据的方式,但操作系统和硬件没有区别。在这种情况下,它应该被视为一个字符,而不是一个数字。那么,将其表示为无符号整数是什么意思呢?这意味着,当转换为int或long时,该值将是无符号的,因此设置的最高有效位不会导致int或long通过符号扩展以负数结束。一般来说,硬件对有符号值和无符号值进行了区分。例如,如果查看英特尔指令集,您将看到有符号乘法和除法以及无符号乘法和除法的指令不同。对于相同的(逐位)输入
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停止。路易斯所解释的完全正确,不要误解我,但你在问题中也说了完全相同的话。当你回答了自己的问题时,我不明白的是你不明白的。这也会影响轮班操作员的工作方式和比较。