教你理解位移

原创
2016/11/04 11:58
阅读数 1

一个很简单问题:用什么方式计算2*8最高效?
没错答案,就是2<<3,你肯定也是知道答案的。
但为什么是2<<3不是2<<2也不是2<<4呢?
估计有不少人就发懵了。
以下就来讲解一下位运算中的左移右移。
先看一下在10进制中对数字进行左右移操作:
目标数字:1
左移1位:10
左移2位:100
右移1位:0.1
右移2位:0.01
很明显,一个10进制的数左移多少位就乘以10的多少次方,右移多少位就除以10的多少次方。
再看一下2进制中对数字进行左右移操作:
目标数字:1
左移1位:10
左移2位:100
右移1位:0.1
右移2位:0.01
看到没有,其实是和10进制是一样的,只不过同样的位移因为不同的进制导致数值的不同。
很明显,一个2进制的数左移多少位就乘以2的多少次方,右移多少位就除以2的多少次方。

根据以上规律可得出:
在r进制中,一个数a左移b位,就等于a乘以r的b次方,公式:a << b=a*(r^b)。
在r进制中,一个数a乘以另一个数b,等于a左移b开r方根的次数(以r为底的b的对数 ),公式:a*b=a<< log r(b)。

在r进制中,一个数a右移b位,就等于a除以r的b次方,公式:a >> b=a/(r^b)。
在r进制中,一个数a除以另一个数b,等于a右移b开r方根的次数(以r为底的b的对数 ),公式:a/b=a>>log r(b)。

现在请看2*8,因为a * b=a<< log r(b),所以2乘以8等于2左移3(3=8开2次方根的次数,以2为底的8的对数)。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部