Skip to content

Truncating integer division safely [ref]

Problem

  • Divide -7 by 3, truncating toward zero using integer arithmetic.
  • Divide 7 by -3 the same way.
  • Observe why floor division of -7 by 3 differs.
  • Clamp signed 32-bit division of -2147483648 by -1.

Python solution

a, b = -7, 3
sign = -1 if (a < 0) != (b < 0) else 1
sign * (abs(a) // abs(b))  # -2

a, b = 7, -3
sign = -1 if (a < 0) != (b < 0) else 1
sign * (abs(a) // abs(b))  # -2

-7 // 3  # -3

INT_MIN, INT_MAX = -(1 << 31), (1 << 31) - 1
a, b = INT_MIN, -1
result = INT_MAX if a == INT_MIN and b == -1 else (
    (-1 if (a < 0) != (b < 0) else 1) * (abs(a) // abs(b))
)
result  # 2147483647
# Avoid int(a / b) for large integers: / converts to floating point.