移位运算符:char、byte、short及long类型的低阶位使用规则是什么?
Java移位运算符:类型处理与低阶位数规则
嘿,我来给你把Java里移位运算符针对char、byte、short和long类型的规则说清楚,再结合《Java编程思想》里的内容,你就能彻底搞懂了:
类型提升与结果类型规则
- 当你对
char、byte或者short执行移位操作时,Java会先把这些类型自动提升为int类型再进行移位计算,最终得到的结果也是int类型。 - 如果操作的是
long类型,移位后的结果仍然是long类型,不会发生类型提升。
低阶位数的限制规则
这部分是核心,能避免你做无意义的移位操作:
- 针对
int类型(包括从char/byte/short提升来的),移位时只会用到右侧操作数的5个低阶位。原因很简单:int是32位,2的5次方等于32,这样就能保证移位的位数永远不会超过int的总位数(比如移33位和移1位效果完全一样,没必要做多余的计算)。 - 针对
long类型,移位时只会用到右侧操作数的6个低阶位。因为long是64位,2的6次方等于64,同样是为了防止移位超过long的总位数。
《Java编程思想》里也有明确说明,原文是这样的:
若对char、byte或short执行移位操作,会先将其提升为int类型再进行移位,结果为int类型;仅使用右侧操作数的5个低阶位,这可防止移位超过int类型的位数。若操作long类型,结果为long类型;仅使用右侧操作数的6个低阶位,避免移位超过……
内容的提问来源于stack exchange,提问作者bugs
相关产品推荐
相关产品推荐

