今日のは、かなり便利です。その名も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 件のコメント:
コメントを投稿