この記事では、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の補数を使った方法、ビット演算を使った方法のいずれも、絶対値を求めるための代替手段として利用することができます。