単純なif分岐をなくすコードを書きたい

概要

非常にシンプルなif分による分岐をなくすコードの書き方についてまとめます.組み込みやその他最適化などにおいて有用な場合があります.
Facebookシェア Twitterツイート LINEで送る このエントリーをはてなブックマークに追加
この章を学ぶ前に必要な知識
0
条件
  • 目的によって幾らか入力、出力に条件あり
効果
  • シンプルなif文分岐をなくし別の書き方にします
ポイント
  • 条件文を評価した値が0または1になることを利用します

解 説

単純なif分岐をなくすコードを書く方法についてまとめます. if文を書かずにシンプルな条件分岐は基本的に 大小比較など評価値が1または0を返すことを利用します. 例えば、 (a < 500)は500未満の時は1、そうでないときは0になります.これを使って数え上げや0代入などを行います. 以下では二つのケースを紹介します. ・閾値以内以上のときにカウントアップ ・閾値以内以上のときに0を代入
単純なif分岐をなくすコードを書きたい

1.閾値以下以上のときにカウントアップ

1.1.通常の書き方

C++
1
2
3
4
5
6
int counter = 3;
int a = 10
 
if( a > 5){
     counter++;
}
通常のコードの書き方 閾値以下または以内の場合にカウントアップするコードです

1.2.if文なしの書き方

C++
1
2
3
4
5
6
int counter = 3;
int a = 10;
 
counter += (a > 5);
// (a>5)は1が帰ってきます.
//それをそのままcounterに足します
if文を使用しない書き方 閾値以下または以内の場合にカウントアップするコードです.

2.閾値以上以下の場合は0にする

2.1.通常の書き方

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int a = 100;
 
//aが500未満ならaを0に
//aが500以上なら何もしない
if(a < 500){
    a = 0;
}
 
int b = 500;
//bが1000未満ならbを1に
//bが1000以上なら0にする
if( b < 1000){
   b = 1;
}else{
   b = 0;
}
通常の書き方 閾値以内以下のときは0にするコードサンプルです.

2.2.if文なしの書き方

C++
1
2
3
4
5
6
7
8
9
10
11
12
int a = 100;
 
//aが500未満ならaを0に
//aが500以上なら何もしない
a *= (a >= 500);
// aが500未満なら a*=0となりaは0に
// aが500以上なら a*=1となりaはaのままに
 
int b = 500;
//bが1000未満ならbを1に
//bが1000以上なら0にする
b = (b < 1000);
if文を使わない書き方. 閾値以内以下のときに0にするコードサンプルです.
上記のような評価値の値を計算に使用することでif文をなくすことができます. これによって必ずとは限りませんが高速化や最適化を改善することができることがあります.
まとめ
この章を学んで新たに学べる
Comments

Reasons
>>隠す