移位不过是技巧
来源:互联网 发布:vivo 微信无法连接网络 编辑:程序博客网 时间:2024/05/21 19:05
使用移位运算来避免乘法运算是一种常用技巧,不过乘数必须都是正整数,而且必须至少有一个是 2 的 n 次方,例如:2,4,8,16,32……移位运算的特点是速度快,而乘法运算速度较慢,把乘法运算转化为移位运算可以稍微提高程序运行效率。例如:
num *= 32;
等同于
num <<= 5; /* 2 的 5 次方等于 32 */
如果乘数不是 2 的 n 次方,我们可以把乘数分解成几个 2 的 n 次方的和:
num *= 20;
等于
num *= (16 + 4);
等于
num = num * 16 + num * 4;
等于
num = (num << 4) + (num << 2);
不过,现在的编译器很聪明,它们会代替我们做这种优化。也就是说,如果我们写的语句是:
num *= 100;
编译器会把这个语句优化为:
num = (num << 6) + (num << 5) + (num << 2);
所以,我们没有必要手工进行这种优化,因为编译器会替我们完成。而且,就算进行了这种优化,速度也不会有太大提高。我们应该把精力用来改进算法,一个好的算法可以让程序运行效率大大提高!
本文版权归蚂蚁的 C/C++ 标准编程以及 作者antigloss共同所有,转载请注明原作者和出处。谢谢。
- 移位不过是技巧
- 字符串移位的解题技巧
- 不过是虚幻
- 不过是生活
- 不过是有感而发
- Java移位运算符及小技巧
- 程序员要知道的移位技巧
- 移位
- 移位
- 移位
- 移位
- 移位
- 移位
- 移位
- 移位
- 移位
- 移位
- 移位
- 鼠标事件发生时元素的定位
- 怎样花两年时间去面试一个人
- IPA文件格式 MIME
- 正则表达式 清除<>标签样式
- Java数字格式化
- 移位不过是技巧
- eclipse 快捷键
- ibatis如何支持clob 和blob
- UE 将DOS格式转换为UNIX格式
- 我们什么东西都要搞明白吗
- VS2008快捷键大全
- 软件开发领域的第三次革命 -- 改变糟糕的软件现状 Alan Cooper
- Apache Shiro(安全框架)
- MemWatch USING