非常教程

C参考手册

数值 | Numerics

ldiv

在头文件<math.h>中定义

div_t div( int x, int y );

(1)

ldiv_t ldiv( long x, long y );

(2)

lldiv_t lldiv( long long x, long long y );

(3)

(since C99)

Defined in header <inttypes.h>

imaxdiv_t imaxdiv( intmax_t x, intmax_t y );

(4)

(since C99)

用分母x来计算分子除法的商和余数y

同时计算商和余数。商是丢弃任何小数部分的代数商(截断为零)。剩下的就是“* y + rem == x”。

(直到C99)

同时计算商(表达式x / y的结果)和余数(表达式x%y的结果)。

(自C99以来)

参数

x,y

-

整数值

返回值

如果这两个余数和商可以表示为相应的类型的对象(INT,很久长,imaxdiv_t,分别地),同时返回作为类型的对象div_tldiv_tlldiv_timaxdiv_t定义如下:

div_t

struct div_t { int quot; int rem; };

要么。

struct div_t { int rem; int quot; };

ldiv_t

struct ldiv_t { long quot; long rem; };

要么。

struct ldiv_t { long rem; long quot; };

lldiv_t

struct lldiv_t { long long quot; long long rem; };

要么。

struct lldiv_t { long long rem; long long quot; };

imaxdiv_t

struct imaxdiv_t { intmax_t quot; intmax_t rem; };

要么。

struct imaxdiv_t { intmax_t rem; intmax_t quot; };

如果余数或商不能表示,行为是不确定的。

笔记

在C99之前,如果两个操作数中的任何一个都是负数,那么在内建的除法运算符和余数运算符中,商的舍入方向和余数的符号是​​实现定义的,但是在div和中定义明确ldiv

在许多平台上,单个CPU指令获得商和余数,并且该函数可以利用该指令,尽管编译器通常能够在合适的地方合并near /和%。

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
 
// demo only: does not check for buffer overflow
void itoa(int n, int base, char* buf)
{
    div_t dv = {.quot = n};
    char* p = buf;
    do {
        dv = div(dv.quot, base);
        *p++ = "0123456789abcdef"[abs(dv.rem)];
    } while(dv.quot);
    if(n<0) *p++ = '-';
    *p-- = '\0';
    while(buf < p) { char c = *p; *p-- = *buf; *buf++ = c; } // reverse
}
 
int main(void)
{
    char buf[100];
    itoa(12346, 10, buf);
    printf("%s\n", buf);
    itoa(-12346, 10, buf);
    printf("%s\n", buf);
    itoa(65535, 16, buf);
    printf("%s\n", buf);
}

输出:

12346
-12346
ffff

参考

  • C11标准(ISO / IEC 9899:2011):
    • 7.8.2.2 imaxdiv函数(p:219)
    • 7.22.6.2 div,ldiv和lldiv函数(p:356)
  • C99标准(ISO / IEC 9899:1999):
    • 7.8.2.2 imaxdiv函数(p:200)
    • 7.20.6.2 div,ldiv和lldiv函数(p:320)
  • C89 / C90标准(ISO / IEC 9899:1990):
    • 4.10 div_t,ldiv_t
    • 4.10.6.2 div函数
    • 4.10.6.4 ldiv函数
C

C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。