Jason ---分享,共同进步

激情成就梦想,努力创造未来
随笔 - 53, 文章 - 1, 评论 - 45, 引用 - 0
数据加载中……

java移位运算符(转载)

a)“>>”运算符

“>>”运算符作带符号的位移处理,它作位移处理时,会先将值向右移,并在高位填0,然后将位移后所空出的高位,全部改成原来的最高位的值(代表正负号的位)。也就是说负的值位移后,仍然是负的值,比如:

-10>>2 =-3

-10= 1111 1111 1111 1111 1111 1111 1111 0110

右移2位:0011 1111 1111 1111 1111 1111 1111 1101

结果:1111 1111 1111 1111 1111 1111 1111 1101 (全部天上原本符号位的值:1)

b)“>>>”运算符

“>>>”运算符所作的是无符号的位移处理,它不会将所处理的值的最高位视为正负符号,所以作位移处理时,会直接在空出的高位填入0。当我们要作位移的原始值并非代表数值时(例如:表示颜色图素的值,最高位并非正负号),可能就会需要使用此种无符号的位移。比如:

-10>>>2=1073741821

-10=1111 1111 1111 1111 1111 1111 1111 0110 (不管原来的“符号”位的值(一长串1),空上的全部直接填0)

0011 1111 1111 1111 1111 1111 1111 1101=1037341821

c)“<<”运算符

“>>”运算符的所作的也是无符号的位移处理,同样地,它不会将所处理的值的最高位视为正负符号,它作位移处理时,会直接左移并在低位填入0。所以第二高位以下的位若移到了最高位,该值的正负可能会与原来的不同。

-2147483647<<2=4

-2147483647=1000 0000 0000 0000 0000 0000 0000 0001

 

0000 0000 0000 0000 0000 0000 0000 0100=4

d)“<<<”运算符
恩,当然了,在java里不存在它。

posted on 2008-03-18 09:51 agun 阅读(3661) 评论(3)  编辑  收藏 所属分类: java 基础

评论

# re: java移位运算符(转载)  回复  更多评论   

-10= 1111 1111 1111 1111 1111 1111 1111 1010
這樣才對吧!
2008-08-14 16:51 | moe

# re: java移位运算符(转载)  回复  更多评论   

呵呵,-10=1111 1111 1111 1111 1111 1111 1111 0110 没有错,
你的-10的值是不对的,二进制求反的方法是:

1、把补码“取反”(把二进制数的各位“1”换“0”,“0”换“1”。比如“101010”取反后为“010101”)
2、把取反后的二进制数“加1”.

2008-08-15 09:11 | agun

# re: java移位运算符(转载)  回复  更多评论   

麻烦写得认真点
2010-01-10 14:59 | 孙陈贤

只有注册用户登录后才能发表评论。


网站导航: