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