Java char由无符号整数表示

时间:2017-08-25 23:31:28

标签: java types

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

2 个答案:

答案 0 :(得分:1)

通常,硬件确实区分了有符号值和无符号值。例如,如果你看一下英特尔指令集,你会发现它是有符号乘法和除法的不同指令,也是无符号乘法和除法的指令。并且它们为相同的(逐位)输入提供不同的答案。

现在针对char的Java案例。

确实char在Java中是无符号的,但是......令人惊讶......它不需要对无符号算术的特殊支持。

Java语言规范指出,当您对byteshortchar执行算术,按位,移位和比较操作时,操作数首先会提升为int (或longfloatdouble(如果需要)。然后使用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)

这意味着,在转换为intlong时,该值将是无符号的,因此设置的最高有效位不会导致int或{{ 1}}通过符号扩展来结束否定。