What is the behavior of integer division? What is the behavior of integer division? c 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

6 When integers are divided, the result of the / operator is the algebraic quotient with anyfractional part discarded.88) If the quotient a/b is representable, the expression(a/b)*b + a%b shall equal a.

and the corresponding footnote:

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

Of course two points to note are:

3 The usual arithmetic conversions are performed on the operands.

and:

5 The result of the / operator is thequotient from the division of thefirst operand by the second; theresult of the % operator is theremainder. In both operations, if thevalue 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.

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


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).