2019年5月18日土曜日

C++で2のD乗をビットの全組合せ文字列に直すプログラム

2乗を2進数と組み合わせているのが分かりにくいけど便利そう。
#include 
#include 
#include 

using namespace std;

int main(){

  // 2のD乗 の選択肢を ビットで計算する
  int D = 4;
  for (int mask = 0; mask < (1 << D); ++mask){
    int s = 0, num = 0, rest_max = -1;
    string bi = "";
    for (int i=0; i < D; ++i){
      /*
      // mask >> i & 1 は 右シフトして最下位のビットが1かを見るので、
      // maskを2進数表示したときの並びが下位から出てくる
      // 2**n の選択 の総当りに使える
      cout << "mask: "<> i): "<< (mask >> i)
        << " (mask >> i & 1): " << (mask >> i & 1) << endl;
      */
      if (mask >> i & 1){
        bi.insert(0, "1");
      } else {
        bi.insert(0, "0");
      }
    }
  cout << bi << endl;
  }
  cout << endl;
}

D=4としているので、2**4=16種類出てきて、4ビットの組合せが出力される
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111

0 件のコメント:

コメントを投稿