# 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 位整数乘法的场景。