首页 > 解决方案 > Java左移运算符

问题描述

在 java 中,char a=5 并使用 leftshift 运算符作为 println(a<<18) /* 结果:262144 */ 并且它在 16 位之后仍然给出进一步的答案,但它不应该因为 java 中的 char 是 16 位。为什么?

标签: javabit-manipulationbit-shift

解决方案


左移应用于intlong操作数。当你将它应用到 achar和 anint时, thechar被提升为 an int,结果是 an int。因此 262144 是一个有效的结果。

JLS 15.19。移位运算符

移位运算符在语法上是左结合的(它们从左到右分组)。

一元数字提升(§5.6.1)对每个操作数分别执行。(二进制数字提升(第 5.6.2 节)不在操作数上执行。)

如果移位运算符的每个操作数的类型在一元数字提升后不是原始整数类型,则这是编译时错误。

移位表达式的类型是左侧操作数的提升类型


推荐阅读