在Java中,为什么将字符强制转换为整数时不会扩展符号位?

8
在Java中,位运算会导致类型转换为整数并且还会引起符号扩展。例如,以下情况是期望的:
byte b = -1;
System.out.println(b >> 1);//-1

在Java中,字符使用UTF-16编码,每个单元使用2个字节表示。

char c = 0xFFFF; //I assume now the sign bit is 1.
System.out.println(c >> 1);//32767 ???? WHY

我预期的是-1而不是32767。为什么在进行位运算之前,类型转换没有扩展符号?有什么想法吗?
2个回答

12

由于char是无符号的 - 0xFFFF实际上具有数值65535。


3
我会尽力进行翻译:我不想挑剔,但 0xFFFF 等于 65535。 - jeha

3

这是因为在移位参数上执行了 扩展原始类型转换。也就是说,没有信息丢失,包括被转换类型的符号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接