首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

位移操作,该如何解决

2012-02-06 
位移操作int x 15 -1int x 15 -1int x 15 -1这三种位移操作符右边的操作数可以是负数

位移操作
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)

热点排行