左右移运算符“<<”,“>>”

本文摘自http://blog.csdn.net/briblue/article/details/70296326

右移运算符(>>)

规则a >> b 将数值 a 的二进制数值从 0 位算起到第 b - 1 位,整体向右方向移动 b 位,符号位不变,高位空出来的位补数值 0。

5>>1 ===> 1000000000000101>>1  =  1000000000000010  =  2
7>>2 ===> 1000000000000111>>2  =  1000000000000001  =  1
9>>3 ===> 1000000000001001>>3 = 1000000000000001  =  1
11>>2 ===> 1000000000001011>>2 = 1000000000000010  =  2

大家发现什么规律没有?a >> b = a / ( 2 ^ b ) ,所以 5 >> 1= 5 / 2 = 2,11 >> 2 = 11 / 4 = 2。

左移运算符(<<)
规则a << b 将数值 a 的二进制数值从 0 位算起到第 b - 1 位,整体向左方向移动 b 位,符号位不变,低位空出来的位补数值 0。

5<<1 ===> 1000 0000 0000 0101<<1 = 1000000000001010 = 10
7<<2 ===> 1000 0000 0000 0111<<2 = 1000000000011100 = 28
9<<3 ===> 1000 0000 0000 1001<<3 = 1000000001001000 = 72
11<<2 ===> 1000 0000 0000 1011<<2 = 1000000000101100 = 44

很明显就可以看出 a << b = a * (2 ^ b)

综合上面两个可以看到,如果某个数值右移 n 位,就相当于拿这个数值去除以 2 的 n 次幂。如果某个数值左移 n 位,就相当于这个数值乘以 2 ^ n。

你可能感兴趣的:(左右移运算符“<<”,“>>”)