div, ldiv, lldiv

From cppreference.com
< c‎ | numeric‎ | math
 
 
 
Common mathematical functions
Functions
Basic operations
divldivlldivimaxdiv
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)(C99)(C99)
Exponential functions
(C99)
(C99)
(C99)
(C99)
Power functions
(C99)
(C99)
Trigonometric and hyperbolic functions
(C99)
(C99)
(C99)
Error and gamma functions
(C99)
(C99)
(C99)
(C99)
Nearest integer floating point operations
(C99)(C99)(C99)
(C99)
(C99)
(C99)(C99)(C99)
Floating point manipulation functions
(C99)(C99)
(C99)
(C99)
Classification
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
Macro constants
 
Defined in header <stdlib.h>
div_t     div( int x, int y );
ldiv_t    ldiv( long x, long y );
lldiv_t   lldiv( long long x, long long y );
(since C99)
Defined in header <inttypes.h>
imaxdiv_t imaxdiv( intmax_t x, intmax_t y );
(since C99)

Computes the quotient (the result of the expression x/y) and remainder (the result of the expression x%y) simultaneously. (since C99)

Computes quotient and remainder simultaneously. The quotient is the algebraic quotient with any fractional part discarded (truncated towards zero). The remainder is such that quot * y + rem == x. (until c99)

Contents

[edit] Notes

Until C99, the rounding direction of the quotient and the sign of the remainder in the built-in division and remainder operators was implementation-defined if either of the operands was negative, but it was well-defined in div and ldiv.

[edit] Parameters

x, y - integer values

[edit] Return value

Structure of type div_t, ldiv_t, ldiv_t, imaxdiv_t defined as:

struct div_t {
    int quot;   // The quotient
    int rem;    // The remainder
};
 
struct ldiv_t {
    long quot;   // The quotient
    long rem;    // The remainder
};
 
struct lldiv_t {
    long long quot;   // The quotient
    long long rem;    // The remainder
};
 
struct imaxdiv_t {
    std::intmax_t quot;   // The quotient
    std::intmax_t rem;    // The remainder
};

[edit] Example

#include <stdio.h>        /* printf */
#include <stdlib.h>       /* div    */
 
int main () {
 
    div_t rslt;
 
    rslt=div(+23,+5); printf("div(+23,+5) = %2d,%2d\n", rslt.quot,rslt.rem);
    rslt=div(-23,+5); printf("div(-23,+5) = %2d,%2d\n", rslt.quot,rslt.rem);
    rslt=div(+23,-5); printf("div(+23,-5) = %2d,%2d\n", rslt.quot,rslt.rem);
    rslt=div(-23,-5); printf("div(-23,-5) = %2d,%2d\n", rslt.quot,rslt.rem);
 
    return 0;
}

Output:

div(+23,+5) =  4, 3
div(-23,+5) = -4,-3
div(+23,-5) = -4, 3
div(-23,-5) =  4,-3

[edit] See also

remainder of the floating point division operation
(function)