我们在HashMap 的 hash 算法相关文章,以及分库分表的数量选择文章中,都提到过,按位与运算要比取模运算更加高效。
为什么呢?
首先,按位与运算(&)是计算机底层的基本操作,直接在二进制位上进行,由简单的逻辑门实现(AND 门),硬件电路非常简单,非常快速。他的时间复杂度是 O(1),处理每个位的操作在一个时钟周期内完成。
并且由于其简单性,编译器可以轻松地优化按位与运算。编译器在生成机器代码时,按位运算直接映射到单个机器指令。
而取模运算涉及除法操作,而除法操作比加法、减法和按位运算要复杂得多。因为在许多处理器架构中,除法运算通过迭代或流水线等复杂机制实现,导致其执行时间较长。虽然现代编译器对取模运算也进行了一定的优化,但由于其底层实现的复杂性,优化效果不如按位与运算明显。