我遇到了Java char类型表示为16位无符号整数的短语。我认为标志只是编译器或解释器如何处理数据,但操作系统和硬件没有区别。在这种情况下,它应该被视为一个字符,而不是一个数字。那么说它表示为无符号整数是什么意思?
答案 0 :(得分:1)
通常,硬件确实区分了有符号值和无符号值。例如,如果你看一下英特尔指令集,你会发现它是有符号乘法和除法的不同指令,也是无符号乘法和除法的指令。并且它们为相同的(逐位)输入提供不同的答案。
现在针对char
的Java案例。
确实char
在Java中是无符号的,但是......令人惊讶......它不需要对无符号算术的特殊支持。
Java语言规范指出,当您对byte
,short
和char
执行算术,按位,移位和比较操作时,操作数首先会提升为int
(或long
,float
或double
(如果需要)。然后使用32位带符号(或其他)指令执行操作,并产生32位(或其他)结果。例如:
char a = 'a';
char b = 'b';
char something = a + b; // error!
char something1 = (char)(a + b); // ok
那么说它表示为无符号整数是什么意思?
嗯,基本上,它>>是<<无符号数。 char
的值为0到65535.它们都大于或等于零。
当char
值转换为int
以对其执行操作时,转换符合您的预期; char 0转换为int 0,65535转到65535,其他所有转换为其中。
答案 1 :(得分:0)
这意味着,在转换为int
或long
时,该值将是无符号的,因此设置的最高有效位不会导致int
或{{ 1}}通过符号扩展来结束否定。