繁体   English   中英

Java向左移动位时,溢出不会消失,但会在另一侧出现

[英]Java when shifting bits left, overflows dont disappear but appear back on other side

int i = 0x000000FF;
i = i << 24;

message = String.format("0x%08X", i);
// prints the message 0xFF000000

int i = 0x000000FF;
i = i << 32;

message = String.format("0x%08X", i);
// prints the message 0x000000FF

我期待第二个打印0x00000000

到底是怎么回事?

参见Java语言规范15.19。 移位运算符

如果左侧操作数的提升类型为int ,则仅将右侧操作数的五个最低阶位用作移位距离。 就像右侧操作数受到掩码值0x1f (0b11111)的按位逻辑AND运算符&§15.22.1 )一样。 因此,实际使用的移动距离始终在031 ,包括031

因此, i << 32i << 0相同,即完全没有移位。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM