教你理解位移

本文详细解释了位运算中的左移和右移操作,并通过实例展示了如何利用这些操作快速完成乘除法运算。对于理解计算机底层原理及提高编程效率非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值