第2个回答 2009-10-02
-5:11111111 11111111 11111111 11111011
算术(带符号位)右移:
11111111 11111111 11111111 11111101,即为-3
逻辑(不带符号位)右移
01111111 11111111 11111111 11111101,即为2^31 - 2 = 2147483646
另外,
1.
byte, short, int类型在移位时 全按32位算,long按64位算,
例如:byte a = 1; 则(a >> 1)是一个int 类型,
2.
int a = 1; a >> x 相当于a >> (x % 32),
long b = 1; b >> y 相当于a >> (y % 64),
例如:“a >> 32”结果仍是a,而“a = a >> 31; a = a >> 1”结果为0
3.
byte a = 1; a >>= 1;相当于a = (byte)a >> 1;