您的位置:首页 > 其它

位移运算符[duo9]

2004-11-23 03:20 387 查看
Java中的位移运算符,是比较令初学者迷惑的地方,尤其是数学基础不好的。至少当初我是如此。
位移运算符(Shift operators)用来操作位,仅仅可以用在基本的整数类型上。
它们分为:
左移运算符号(<<);
右移运算符号(>>);
Java中还有一种特殊的,无正负号的右移运算符(>>>)

(1)左移动运算符:
会将操作的数向左边移动,移动的位的个数由右操作数指定,左移后,低位会被自动补零(0)。
(2)右移动运算符:
反过来,把操作数向右移动,移动的位个数同样由右操作数指定。注意:面对带正负号的数,会采用符号扩展,如果原值是正数,则高位补上0;如果原值是负数,高位补1。
(3)无正负号的右移运算符(>>>):
采用0补充,意思就是说,无论是正号还是负号,都在高位补0。

如果你操作数是比如char,byte,short,位移运算之前,会转型为int,正如前面所说,位移运算符仅仅可以用在类型为int的数值上。

例:
public class URShift{
public static void main(String[] args){
int i=-1;
i>>>=10;
System.out.println(i);
}
}

java: 4194303

怎样工作:
用二进制表示时最高位用0或1表示正负
0表示正 1表示负(不是仅最高为1 而是所有的高位都是1)>> 是带符号右移   右移时左边补符号位
>>> 是不带符号右移  右移时左边补零所以两者在处理 正数时是一样的 左边都补零
但在处理负数时就有区别了 >>补1 >>>补0所以 -1
1111 1111 1111 1111 1111 1111 1111 1111B
i >>>= 10 后
0000 0000 0011 1111 1111 1111 1111 1111B
= 4194303
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: