C-在c语言中乘法和除法,比位移运算更快吗?

C-在c语言中乘法和除法,比位移运算更快吗?

虐人心 发布于 2017-01-01 字数 147 浏览 2057 回复 8

比如下面一个例子

i*2 = i<<1
i*3 = (i<<1)+i;
i*10 = (i<<3) + (i<<1)

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

想挽留 2017-11-03 8 楼

应该不管是哪种语言,都有“移位>乘法>除法”的特性。
而且移位还会用在其他运算中,举个例子:
为了避免使用Math类的round方法进行四舍五入,可以用替代方法:

function round(value:Number):int {
return (value + 0.5) >> 0;
}

归属感 2017-11-02 7 楼

我现在就在做一个测试 用的是AVR 单片机 8 bits的
用了除法运算 明显的就看到程序的运行速度变慢了许多
因为该类型的芯片没有硬件除法,是通过算法模拟的

归属感 2017-10-10 6 楼

速度:移位>乘法>除法。
计算机中有专门的移位功能部件,这也是最基础的部件。乘法和除法都是靠移位实现的。乘2^n,左移n位,除2^n,右移n位。

另外,原始的乘法器是一步一步乘(移位)出来的,每次取乘数的一位与被乘数操作,1则把被乘数照写,0则为0,然后乘数右移。这样循环,最后把每一步结果加起来。
后面通过阵列连乘器改进速度,一次算出上面每一步的结果,然后直接相加。

乘法是加操作,而除法是每步的结果作加法或减法(加减交替法),有的算法还需要恢复上一次的结果(余数恢复法),而且每一步加减后还要进行移位,所以最慢。

具体参见<<计算机组成原理>>。

因为移位速度快,所以经常被应用。比如给程序加花指令(增加Cracker破解难度)时,很多地方使用移位操作。

偏爱自由 2017-07-26 5 楼

对于这个问题,就像上面众高手所说,应该归结于计算机硬件而不是某种语言。

上面也给出了非常标准的答案,不过我还想给出一个趣味一些的答案:也许在不久的将来,一些新型计算机的出现,如量子计算机,能实现乘法跟除法比移位更快的运行速度,据说量子计算机对一个1000位的数进行因式分解只需几分之一秒,同样的事情由目前最快的计算机来做,则需10年。

瑾兮 2017-07-12 4 楼

移位、乘法、除法要根据MCU的架构和编译器的编译方式,在绝大多数情况下,移位效率肯定是大于乘法、除法是很慢的,即使MCU带有除法器,所使用的周期也比乘法多,在有的mcu上具有单周期乘法器,这种就比较快。

浮生未歇 2017-07-06 3 楼

位移运算肯定是最快的...也是通过位移运算实现的嘛.. + - * /的效率和难度问题,你可以去找找c/C++中 大数的+-/的模板就知道难易和效率问题.

清晨说ぺ晚安 2017-06-29 2 楼

移位比乘法快,个别情况下编译器会将高级语言的乘法编译成移位指令,但大部分还是直接用乘法指令。一个乘法指令的周期是移位或者加法指令的6倍左右,你说哪个快。

浮生未歇 2017-02-25 1 楼

所有的数学计算都是通过逻辑移位或者算术移位来实现的。其中除法是最慢的