div, ldiv, lldiv, imaxdiv
提供: cppreference.com
一般的な数学関数
関数
基本操作
指数関数
冪関数
三角関数と双曲線関数
誤差関数とガンマ関数
最も近い整数
浮動小数点操作関数
分類
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
型
div_tldiv_tlldiv_timaxdiv_t
(C99)(C99)
(C99)(C99)
マクロ定数
(C99)(C99)
(C99)(C99)(C99)
(C99)(C99)(C99)
(C99)
(C99)
(C99)(C99)
(C99)(C99)(C99)(C99)(C99)
ヘッダ
<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>
で定義
分子 x
を分母 y
で割った商と余りの両方を計算します。
商と余りを同時に計算します。 商は小数部を破棄した (ゼロに向かって切り捨てた) 代数的な商です。 余りは quot * y + rem == x が成り立つように計算されます。
(C99未満)商 (式 x/y の結果) と余り (式 x%y の結果) を同時に計算します。
(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
または
余りまたは商のいずれかが表現できない場合、動作は未定義です。
[編集] ノート
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)