首页 > 解决方案 > 为什么位移有用?

问题描述

我了解位移的工作原理以及编译器使用它们来优化运行时,但我不了解位移的数学意义。例如,它对十进制表示的数字有什么作用?如何在算法编程中使用位移?

标签: bit-shift

解决方案


移位的一个有用应用是算术移位,其中使用移位比传统方式更有效地执行某些乘法或除法运算。

在有符号或无符号二进制数上左移 n 位具有将其乘以 2^n 的效果。在二进制补码符号二进制数上右移 n 位具有将其除以 2^n 的效果,但它总是向下舍入(朝向负无穷大)。

例如,以下面的 python 代码为例。

base = 5
traditional = 5 * 8  # or 5 * 2**3
shifted = 5 << 3
assert shifted == traditional

在此示例中,您可以看到它们都产生相同的结果,只是以两种不同的方式得出结果。当编译器在编译时知道乘数是 2 的幂时,这就是您的编译器将在后台执行的优化数学运算的操作


推荐阅读