码迷,mamicode.com
首页 > 其他好文 > 详细

深入理解位移

时间:2015-06-17 18:23:04      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:java   位运算   位移   

一个很简单问题:用什么方式计算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次方根)。

深入理解位移

标签:java   位运算   位移   

原文地址:http://blog.csdn.net/u012643122/article/details/46535799

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!