在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.为什么在应用按位操作之前,在类型转换期间标志没有延长?有什么想法吗?
答案 0 :(得分:12)
由于char
未签名,因此0xFFFF
的值确实为65535
答案 1 :(得分:3)
它的工作方式与此类似,因为widening primitive conversion是在移位参数上执行的。即没有信息丢失,包括转换类型的标志。