读书人

位移操作,该如何解决

发布时间: 2012-02-06 15:52:44 作者: rapoo

位移操作
int x = 15 << -1;
int x = 15 >> -1;
int x = 15 >>> -1;


这三种位移操作符右边的操作数可以是负数吗,如果可以,它们的值要怎么计算?

[解决办法]
那就看编译器怎么实现了
当超出左移int的范围时,会循环回到右边
也就是说
int x = 15 << 32; //x == 15
int y = 15 << 33; //y == 15 << 1
a << b 等价于 a << (b%32)

同时,根据这个32位一个周期循环,可以知道
a << -b 等价于 a << (-b%32)+32

所以
int x = 15 << -1; 等价于 int x = 15 << (-1 + 32)
int x = 15 >> -1; 等价于 int x = 15 >> (-1 + 32)
int x = 15 >>> -1; 等价于 int x = 15 >>> (-1 + 32)

读书人网 >J2SE开发

热点推荐