Java中的整数移位运算符

对于<<, >>两种运算符,可以这样说:
a < < b = a ∗ 2 b a<<b=a*2^b a<<b=a2b
a > > b = a / 2 b a>>b=a/2^b a>>b=a/2b
但是对于>>>…不好说了。

这些位运算在计算机中怎样运算的?

大家都知道,整数在计算机中是以二进制存储的:
0 = ( 0 ) 2 0 = (0)_2 0=(0)2
4 = ( 100 ) 2 4 = (100)_2 4=(100)2
8 = ( 1000 ) 2 8 = (1000)_2 8=(1000)2
20 = ( 10100 ) 2 20 = (10100)_2 20=(10100)2
666 = ( 1010011010 ) 2 666 = (1010011010)_2 666=(1010011010)2

左移(<<

a < < b a << b a<<b就是在 a a a的二进制后面添上 b b b 0 0 0,所以 a < < b = a ∗ 2 b a<<b=a*2^b a<<b=a2b

20 20 20当例子,

20 < < 1 = ( 10100 ) 2 < < 1 = ( 101000 ) 2 = 40 20 << 1 = (10100)_2 << 1 = (101000)_2 = 40 20<<1=(10100)2<<1=(101000)2=40
20 < < 2 = ( 10100 ) 2 < < 2 = ( 1010000 ) 2 = 80 20 << 2 = (10100)_2 << 2 = (1010000)_2 = 80 20<<2=(10100)2<<2=(1010000)2=80

右移(>>

>><<相反, a > > b a>>b a>>b就是在 a a a的二进制后面去掉 b b b位,所以 a > > b = a / 2 b a>>b=a/2^b a>>b=a/2b

还是拿 20 20 20当例子:

20 > > 1 = ( 10100 ) 2 > > 1 = ( 1010 ) 2 = 10 20 >> 1 = (10100)_2 >> 1 = (1010)_2 = 10 20>>1=(10100)2>>1=(1010)2=10
20 > > 2 = ( 10100 ) 2 > > 2 = ( 101 ) 2 = 5 20 >> 2 = (10100)_2 >> 2 = (101)_2 = 5 20>>2=(10100)2>>2=(101)2=5

如果末尾不是 0 0 0呢?照样去:

21 > > 1 = ( 10101 ) 2 > > 1 = ( 1010 ) 2 = 10 21 >> 1 = (10101)_2 >> 1 = (1010)_2 = 10 21>>1=(10101)2>>1=(1010)2=10

无符号/逻辑右移(>>>

看这里

猜你喜欢

转载自blog.csdn.net/write_1m_lines/article/details/105305935
今日推荐