為什么3右移32等于3而不是0。我在 nodeJs 和 Java 中得到了這些結(jié)果3 >> 31 = 03 >> 32 = 33 >> 33 = 13 >> 34 = 03 >> 35 = 0
1 回答

楊魅力
TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個(gè)贊
這是 Java 語言規(guī)范的一部分。右側(cè)操作數(shù)被換行,因此它始終在 0 - bits范圍內(nèi),其中bits是左側(cè)操作數(shù)的位數(shù)。由于您要移動(dòng) 32 位整數(shù),因此右手操作數(shù)包含在 0 到 31 之間。32 變?yōu)?0,33 變?yōu)?1 等。
請(qǐng)參閱移位運(yùn)算符的 Java 語言規(guī)范:
如果左側(cè)操作數(shù)的提升類型為 int,則僅右側(cè)操作數(shù)的五個(gè)最低位用作移位距離。就好像右邊的操作數(shù)受到掩碼值 0x1f (0b11111) 的按位邏輯與運(yùn)算符 & (§15.22.1)。因此,實(shí)際使用的移位距離始終在 0 到 31 的范圍內(nèi),包括端值。
添加回答
舉報(bào)
0/150
提交
取消