在Java中,为什么将字符类型转换为整数不会扩展符号位

时间:2011-11-17 10:02:44

标签: java upcasting

在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 个答案:

答案 0 :(得分:12)

由于char未签名,因此0xFFFF的值确实为65535

答案 1 :(得分:3)

它的工作方式与此类似,因为widening primitive conversion是在移位参数上执行的。即没有信息丢失,包括转换类型的标志。