Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

  1. トップページ
  2. C言語辞典
  3. abs() / labs() / div()

abs() / labs() / div()

整数の絶対値を求める関数と、商と余りを同時に計算する関数です。いずれも『<stdlib.h>』に定義されています。浮動小数点数の絶対値には『<math.h>』の『fabs()』を使います。

構文
// int 型の絶対値を返します。
int abs(int n);

// long 型の絶対値を返します。
long labs(long n);

// long long 型の絶対値を返します(C99以降)。
long long llabs(long long n);

// int の商と余りを一度に計算して div_t 構造体で返します。
div_t div(int numer, int denom);

// long の商と余りを一度に計算して ldiv_t 構造体で返します。
ldiv_t ldiv(long numer, long denom);
div_t / ldiv_t 構造体
メンバ型(div_t)概要
quotint商(numer / denom)の結果です。
remint余り(numer % denom)の結果です。
サンプルコード
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    // abs で int の絶対値を求めます。
    printf("abs(-10) = %d\n", abs(-10)); // 『abs(-10) = 10』と出力されます。
    printf("abs(7)   = %d\n", abs(7));   // 『abs(7) = 7』と出力されます。

    // labs で long の絶対値を求めます。
    long big = -123456789L;
    printf("labs(%ld) = %ld\n", big, labs(big)); // 正の値が出力されます。

    // div で商と余りを一度に求めます(/ と % を2回書かずに済みます)。
    div_t result = div(17, 5);
    printf("17 / 5 = 商%d 余り%d\n", result.quot, result.rem);
    // 『17 / 5 = 商3 余り2』と出力されます。

    // 座標間の距離計算など、絶対値の典型的な使い方です。
    int x1 = 3, x2 = -4;
    int distance = abs(x2 - x1);
    printf("x1とx2の距離: %d\n", distance); // 『x1とx2の距離: 7』と出力されます。

    // 時・分の変換で div を活用します。
    int total_minutes = 137;
    div_t time = div(total_minutes, 60);
    printf("%d分 = %d時間%d分\n", total_minutes, time.quot, time.rem);
    // 『137分 = 2時間17分』と出力されます。

    return 0;
}
概要

INT_MIN(最小の int 値)の絶対値は int 型で表現できないため、abs(INT_MIN) の結果は未定義動作になります。この値が入力される可能性がある場合は long や long long を使うか、事前にチェックを入れてください。

『div()』は除算と剰余を1回の演算でまとめて求められます。コンパイラの最適化によっては単純な『/』と『%』の組み合わせと同等のコードが生成されますが、コードの意図を明示する用途にも使われます。

浮動小数点数の絶対値は『fabs()』を使用してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。