以下は目次です。
ある数値の符号を取得したいとします。
「符号を取得する」といっても、符号そのものを値として表現することはできませんから、正の数ならば 1、負の数ならば -1 を取得することにします。
符号を表現する方法として、1 と -1 を使うと都合が良いことがあります。たとえば、「変数 a の符号を、変数 b の符号と同じにする」という操作を、次のように実現できます。get_sign関数が、符号を返す関数です。
int a = 10;
int b = -20;
= abs(a) * get_sign(b); a
C99規格ではこの処理は、標準ライブラリの copysign関数で実現できます。
#include <stdio.h>
/*
符号を取得する
引数
num: 対象の数値
戻り値
num が正なら 1、負なら -1。
num が 0 のときにも 1 を返す。
*/
inline int get_sign(double num)
{
return num >= 0 ? 1 : -1;
}
int main(void)
{
("%d\n", get_sign(10));
printf("%d\n", get_sign(-20));
printf("%d\n", get_sign(0));
printf}
実行結果:
1
-1
1
#include <stdio.h>
/*
符号を取得する
引数
num: 対象の数値
戻り値
num が正なら 1、負なら -1。
num が 0 のときにも 1 を返す。
*/
inline int get_sign(double num)
{
return (num >= 0) - (num < 0);
}
int main(void)
{
("%d\n", get_sign(10));
printf("%d\n", get_sign(-20));
printf("%d\n", get_sign(0));
printf}
実行結果:
1
-1
1
条件式の結果は必ず 0 か 1 になるので(第13章)、「0以上か? - 0未満か?」という式で、目的通りの結果を得られます。
左側の条件式から等号を外して
(num > 0) - (num < 0)
とすると、num が 0
のときの結果が 0 になります。
return 0;
を削除(C言語編全体でのコードの統一)
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |