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。为什么在应用按位运算之前在类型转换期间没有扩展符号?有任何想法吗?

4

2 回答 2

12

因为char是无符号的 -0xFFFF确实有 65535 的值

于 2011-11-17T10:07:01.227 回答
3

它的工作原理是这样的,因为扩大了对移位参数执行的原始转换。即没有信息丢失,包括被转换类型的符号。

于 2011-11-17T10:23:13.980 回答