x * 10 的位运算写法
大约 1 分钟位运算
1. 位移运算基础
在计算机中,左移位运算符 <<
表示将一个数的二进制表示向左移动指定的位数。
当一个整数向左移动一位时,它的值会乘以 。
x << 1
等价于x * 2
x << 2
等价于x * 4
(即x * 2²
)x << 3
等价于x * 8
(即x * 2³
)- 以此类推...
如何得到 x * 10
, 我们知道:
所以:
x * 8
可以写成x << 3
x * 2
可以写成x << 1
即:
x * 10 = x * (8 + 2) = x * 8 + x * 2 = (x << 3) + (x << 1)
2. 为什么要这样做?
a. 性能优化
在早期的计算机或某些特定处理器上,位运算通常比乘法运算更快。
现代编译器已经能够自动将乘法优化为位运算(当乘数是2的幂或接近2的幂时),但在一些微控制器或较老的架构上,手动编写位运算仍然可能带来性能提升。
b. 编译器优化
即使在现代处理器上,显式使用位运算也可以给编译器更多优化的线索,有时能够生成更高效的代码。
在现代计算机上,这种优化的实际效果可能不显著:
- 在快读函数中,耗时主要在I/O操作,而不是整数计算
- 现代编译器已经能够自动执行类似的优化
- 现代CPU的整数乘法指令已经非常高效
3. 其他常见的位运算替代
类似的位运算优化还有:
x * 4 = x << 2
x * 16 = x << 4
x * 32 = x << 5
x / 2 = x >> 1
(整数除法)x / 4 = x >> 2
(整数除法)