簡體   English   中英

位移,得到不正確的值

[英]Bits shifting, getting incorrect value

對於這種轉變:

System.out.println(0b10000000_00000000_00000000_00000001>>>32);

我得到這個 output 值:

-2147483647

這是對的嗎?

JLS說:

如果左側操作數的提升類型是 int,則只有右側操作數的五個最低位用作移位距離。 就好像右手操作數受到按位邏輯與運算符 & (§15.22.1) 的影響,掩碼值為 0x1f (0b11111)。 因此,實際使用的移位距離始終在 0 到 31 的范圍內,包括 0 到 31。

由於 32 是二進制的 100000,因此只取了最低的五個位,這意味着您根本不移動左側操作數。

換句話說, 0b10000000_00000000_00000000_00000001>>>32等價於0b10000000_00000000_00000000_00000001>>>0

因此結果是0b10000000_00000000_00000000_00000001

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM