# Math.imul
# 简介
Math.imul(a, b) 计算两个 32 位整数的乘积,并返回 32 位有符号结果。
# 定义
JS 的普通乘法会使用 64 位浮点数,有时会失去 32 位整数乘法的精确性。imul 用位运算保证 32 位整数乘法语义。
# JS 实现
const imul = (a, b) => {
const ah = (a >>> 16) & 0xffff
const al = a & 0xffff
const bh = (b >>> 16) & 0xffff
const bl = b & 0xffff
return (al * bl + (((ah * bl + al * bh) << 16) >>> 0)) | 0
}
# 例子
Math.imul(0xffffffff, 5) // -5
# 应用
哈希、加密算法、图形学等需要 32 位整数乘法的场景。