### 20.2 Integer Division ¶

This section describes functions for performing integer division. These functions are redundant when GNU CC is used, because in GNU C the ‘`/`’ operator always rounds towards zero. But in other C implementations, ‘`/`’ may round differently with negative arguments. `div` and `ldiv` are useful because they specify how to round the quotient: towards zero. The remainder has the same sign as the numerator.

These functions are specified to return a result r such that the value `r.quot*denominator + r.rem` equals numerator.

To use these facilities, you should include the header file `stdlib.h` in your program.

Data Type: div_t ¶

  This is a structure type used to hold the result returned by the `div` function. It has the following members:

  `int quot`

    The quotient from the division.

  `int rem`

    The remainder from the division.

Function: `div_t` div `(int numerator, int denominator)` ¶

  Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.

  The function `div` computes the quotient and remainder from the division of numerator by denominator, returning the result in a structure of type `div_t`.

  If the result cannot be represented (as in a division by zero), the behavior is undefined.

  Here is an example, albeit not a very useful one.

      div_t result;
      result = div (20, -6);

  Now `result.quot` is `-3` and `result.rem` is `2`.

Data Type: ldiv_t ¶

  This is a structure type used to hold the result returned by the `ldiv` function. It has the following members:

  `long int quot`

    The quotient from the division.

  `long int rem`

    The remainder from the division.

  (This is identical to `div_t` except that the components are of type `long int` rather than `int`.)

Function: `ldiv_t` ldiv `(long int numerator, long int denominator)` ¶

  Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.

  The `ldiv` function is similar to `div`, except that the arguments are of type `long int` and the result is returned as a structure of type `ldiv_t`.

Data Type: lldiv_t ¶

  This is a structure type used to hold the result returned by the `lldiv` function. It has the following members:

  `long long int quot`

    The quotient from the division.

  `long long int rem`

    The remainder from the division.

  (This is identical to `div_t` except that the components are of type `long long int` rather than `int`.)

Function: `lldiv_t` lldiv `(long long int numerator, long long int denominator)` ¶

  Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.

  The `lldiv` function is like the `div` function, but the arguments are of type `long long int` and the result is returned as a structure of type `lldiv_t`.

  The `lldiv` function was added in ISO C99.

Data Type: imaxdiv_t ¶

  This is a structure type used to hold the result returned by the `imaxdiv` function. It has the following members:

  `intmax_t quot`

    The quotient from the division.

  `intmax_t rem`

    The remainder from the division.

  (This is identical to `div_t` except that the components are of type `intmax_t` rather than `int`.)

  See Integers for a description of the `intmax_t` type.

Function: `imaxdiv_t` imaxdiv `(intmax_t numerator, intmax_t denominator)` ¶

  Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.

  The `imaxdiv` function is like the `div` function, but the arguments are of type `intmax_t` and the result is returned as a structure of type `imaxdiv_t`.

  See Integers for a description of the `intmax_t` type.

  The `imaxdiv` function was added in ISO C99.