div, ldiv, lldiv, imaxdiv
提供: cppreference.com
<tbody>
</tbody>
| ヘッダ <stdlib.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) | (C99以上) |
| ヘッダ <inttypes.h> で定義
|
||
imaxdiv_t imaxdiv( intmax_t x, intmax_t y ); |
(4) | (C99以上) |
分子 x を分母 y で割った商と余りの両方を計算します。
|
商と余りを同時に計算します。 商は小数部を破棄した (ゼロに向かって切り捨てた) 代数的な商です。 余りは |
(C99未満) |
|
商 (式 |
(C99以上) |
引数
| x, y | - | 整数値 |
戻り値
余りと商の両方が対応する型 (ぞれぞれ int, long, long long, imaxdiv_t) のオブジェクトとして表現可能な場合は、以下のように定義される型 div_t, ldiv_t, lldiv_t, imaxdiv_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 では well-defined でした。
多くのプラットフォームでは単一の CPU 命令で商と余りの両方を取得でき、この関数はそれを活用するかもしれません。 とはいえ、コンパイラは一般的に、近接する / および % を、適切な場合はマージすることができます。
例
Run this code
#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 standard (ISO/IEC 9899:2011):
- 7.8.2.2 The imaxdiv function (p: 219)
- 7.22.6.2 The div, ldiv and lldiv functions (p: 356)
- C99 standard (ISO/IEC 9899:1999):
- 7.8.2.2 The imaxdiv function (p: 200)
- 7.20.6.2 The div, ldiv and lldiv functions (p: 320)
- C89/C90 standard (ISO/IEC 9899:1990):
- 4.10 div_t, ldiv_t
- 4.10.6.2 The div function
- 4.10.6.4 The ldiv function
関連項目
(C99)(C99) |
浮動小数点除算の余りを計算します (関数) |
(C99)(C99)(C99) |
浮動小数点除算の符号付きの余りを計算します (関数) |
(C99)(C99)(C99) |
除算の下位3ビットと符号付きの余りを計算します (関数) |
div の C++リファレンス
| |