簡體   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