# c – What is the behavior of integer division?

## c – What is the behavior of integer division?

Will result always be the floor of the division? What is the defined behavior?

Not quite. It rounds toward 0, rather than flooring.

6.5.5 Multiplicative operators

6When integers are divided, the result of the / operator is the algebraic quotient with any

fractional part discarded.^{88)}If the quotient a/b is representable, the expression

(a/b)*b + a%b shall equal a.

and the corresponding footnote:

- This is often called ‘‘truncation toward zero’’.

Of course two points to note are:

3The usual arithmetic conversions are performed on the operands.

and:

5The result of the / operator is the

quotient from the division of the

first operand by the second; the

result of the % operator is the

remainder.In both operations, if the

value of the second operand is zero,

the behavior is undefined.

[Note: Emphasis mine]

Dirkgently gives an excellent description of integer division in C99, but you should also know that in C89 integer division with a negative operand has an implementation-defined direction.

From the ANSI C draft (3.3.5):

If either operand is negative, whether the result of the / operator is the largest integer less than the algebraic quotient or the smallest integer greater than the algebraic quotient is implementation-defined, as is the sign of the result of the % operator. If the quotient a/b is representable, the expression (a/b)*b + a%b shall equal a.

So watch out with negative numbers when you are stuck with a C89 compiler.

Its a fun fact that C99 chose truncation towards zero because that was how FORTRAN did it. See this message on comp.std.c.

#### c – What is the behavior of integer division?

Yes, the result is always truncated towards zero. It will round towards the smallest absolute value.

```
-5 / 2 = -2
5 / 2 = 2
```

For unsigned and non-negative signed values, this is the same as floor (rounding towards -Infinity).