Search on the blog

2011年4月28日木曜日

知ってると便利なSTL(7) bitset

C++のSTL紹介第7弾。
今日のは、かなり便利です。その名もbitset。
名前のとおり10進数を2進数に変換してくれます。

使い方は、 bitset<ビット長>(数値)とするだけ。
自分で作らなくても、c++標準関数に二進数変換機能があったんですねー@_@

以下、ビット演算でいろいろやってます。
基本的なものが多いですが、最後に書いてるn & -nは、なかなかマニアックです。(アルゴリズマーにとっては、常識の範疇??)
n & -nでnのnon-zero LSBが取れます!


#include <bitset>

int main() {

int a = 20004;

// high 7 and 8 bits
int mask = 1 << 8 | 1 << 7;
cout << bitset<16>(a) << endl;
cout << bitset<16>(a | mask) << endl << endl;

// low 9 and 10 bits
mask = 1 << 9 | 1 << 10;
cout << bitset<16>(a) << endl;
cout << bitset<16>(a & ~mask) << endl << endl;

// flip 0 and 1 bits
mask = 1 << 0 | 1 << 1;
cout << bitset<16>(a) << endl;
cout << bitset<16>(a ^ mask) << endl << endl;

// the leaset significant non-zero bit
cout << bitset<16>(a) << endl;
cout << bitset<16>(-a) << endl;
cout << bitset<16>(a&-a) << endl;

return 0;
}
追記:
メンバ関数to_string()を使えば、対応するString型をえることができます。
string x = bitset<16>(a&-a).to_string();
のようにすればよいです。

0 件のコメント:

コメントを投稿