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 的幂时,这就是您的编译器将在后台执行的优化数学运算的操作
推荐阅读
- performance - 与 CPU 相比,内存复制在 GPU 上花费的时间更多
- java - 通过键从HashMap中获取值
- google-apps-script - 在电子表格中切换工作表时如何触发功能?
- hibernate - netbeans 11.0 版是否有休眠插件?
- r - 使用 dplyr 创建一个通用的描述表
- c++ - C++ => 没有构造函数可以采用源类型,或者构造函数重载决议不明确
- php - 正则表达式匹配不在特定 div 中的标题标签
- javascript - 如何让 magnific popup 与数组一起使用
- python - Keras 中 LSTM 模型训练一个时期中步数的重要性
- php - 使用 date_sunrise() 和 date_sunset() php 计算白天和晚上的时间量