一个很简单问题:用什么方式计算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次方根)。
时间: 2024-10-28 14:36:24