【C言語】abs関数を使わないで絶対値を計算する方法を解説

この記事では、C言語で絶対値を計算する方法を、abs関数を使わずに解説します。

目次から探す

abs関数を使わないで絶対値を計算する方法

プログラミングにおいて、絶対値を求めるためには通常、C言語の標準ライブラリで提供されているabs関数を使用します。

しかし、abs関数を使わずに絶対値を計算する方法も存在します。

以下では、条件分岐を使った方法、2の補数を使った方法、ビット演算を使った方法について解説します。

条件分岐を使った方法

条件分岐を使った方法では、与えられた数値が負の場合には符号を反転させることで絶対値を求めます。

具体的なコード例を示します。

#include <stdio.h>
int absolute(int num) {
    if (num < 0) {
        return -num;
    } else {
        return num;
    }
}
int main() {
    int num = -10;
    int absValue = absolute(num);
    printf("絶対値: %d\n", absValue);
    return 0;
}

上記のコードでは、absolute関数を定義し、与えられた数値が負の場合には符号を反転させて返します。

main関数では、numに-10を代入し、absolute関数を呼び出して絶対値を求め、結果を表示しています。

絶対値: 10

2の補数を使った方法

2の補数を使った方法では、与えられた数値のビットを反転させ、1を加えることで絶対値を求めます。

具体的なコード例を示します。

#include <stdio.h>
int absolute(int num) {
    if (num < 0) {
        return ~num + 1;
    } else {
        return num;
    }
}
int main() {
    int num = -10;
    int absValue = absolute(num);
    printf("絶対値: %d\n", absValue);
    return 0;
}

上記のコードでは、absolute関数を定義し、与えられた数値が負の場合にはビットを反転させて1を加えて返します。

main関数では、numに-10を代入し、absolute関数を呼び出して絶対値を求め、結果を表示しています。

絶対値: 10

ビット演算を使った方法

ビット演算を使った方法では、与えられた数値の符号ビットを0にすることで絶対値を求めます。

具体的なコード例を示します。

#include <stdio.h>
int absolute(int num) {
    int mask = num >> (sizeof(int) * 8 - 1);
    return (num + mask) ^ mask;
}
int main() {
    int num = -10;
    int absValue = absolute(num);
    printf("絶対値: %d\n", absValue);
    return 0;
}

上記のコードでは、absolute関数を定義し、与えられた数値の符号ビットを0にするためのマスクを作成し、それを使って絶対値を求めます。

main関数では、numに-10を代入し、absolute関数を呼び出して絶対値を求め、結果を表示しています。

絶対値: 10

以上が、C言語でabs関数を使わずに絶対値を計算する方法の解説です。

条件分岐を使った方法、2の補数を使った方法、ビット演算を使った方法のいずれも、絶対値を求めるための代替手段として利用することができます。

目次から探す