Loading

Java中的整数移位运算符

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

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

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

左移(<<

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

\(20\)当例子,

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

右移(>>

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

还是拿\(20\)当例子:

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

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

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

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

看这里

posted @ 2020-04-04 10:41  GoodCoder666  阅读(16)  评论(0)    收藏  举报