aki*_*aki 21 php bit-shift multiplying
我有以下代码:
<?php
$start = 1;
$timestart = microtime(1);
for ($i = 0; $i < 1000000; $i++) {
$result1 = $start * 4;
}
echo "\n";
echo microtime(1) - $timestart;
echo "\n";
$timestart = microtime(1);
for ($i = 0; $i < 1000000; $i++) {
$result2 = $start << 2;
}
echo "\n";
echo microtime(1) - $timestart;
echo "\n";
Run Code Online (Sandbox Code Playgroud)
这输出:
0.14027094841003
0.12061500549316
Run Code Online (Sandbox Code Playgroud)
我在互联网上找到了一个谷歌面试问题(我想申请开发人员,但我意识到我不能),其中一个问题询问最快的方法是乘以一个数字.我的第一个想法是使用*标志,所以我测试了它.
我的问题是,为什么比乘法更快地移位?
dec*_*eze 16
因为位移是计算机一直在硬件中进行的操作,所以对于CPU来说这是一个明智的选择.乘以任意数字是比较困难的,因为它不一定使用简单的位移来完成,但需要实际工作.将一个小整数乘以4恰好是一个与左移2相同的操作.但即使编译器/运行时/ CPU将此操作优化到一个位移,一些代码首先需要认识到它可以被优化这样,这比简单的位移本身更有效.
无论哪种方式,它只是更多的工作,因为这两个操作做了完全不同的事情,即使某些操作的结果是相同的.
taz*_*taz 13
因为位移是可以直接在硬件中实现的操作,而硬件很少直接实现乘法运算.使用一些简单的逻辑门可以实现乘以2的幂乘法,而乘以任意被乘数需要至少几次乘以2的幂加上相互叠加的自加运算(5 = 2)*2 + 1).我不知道PHP语言是否通过使用任何可用的低级别调用来专门实现移位操作,但如果不这样做,我会感到惊讶.
资料来源:多年经验+计算机科学教育
| 归档时间: |
|
| 查看次数: |
1185 次 |
| 最近记录: |