在Java中,char a = 5并使用leftshift运算符作为println(a << 18)/ *结果:262144 * /,它在16位之后仍给出进一步的答案,但不应这样做,因为Java中的char是16位。为什么?
答案 0 :(得分:2)
左移应用于int
或long
操作数。将其应用于char
和int
时,char
被提升为int
,结果为int
。因此262144是有效的结果。
shift运算符在语法上是左联想的(它们的组从左到右)。
分别对每个操作数执行一元数值提升(第5.6.1节)。 (不对操作数执行二进制数字提升(第5.6.2节)。)
如果在一元数值提升后,移位运算符的每个操作数的类型不是原始整数类型,则是编译时错误。
移位表达式的类型是左操作数的提升类型。