[英]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.