2017-12-21 29 views
-3

特定のビットセット< 32>を指定すると、ビットセットのm LSBビットをどのように選択して表示できますか? mは整数値です。ビットセットから特定の範囲ビットを選択して表示する

例えば、私は10110111011110111101111011000100であり、m = 8を持っている、コードはこれを行うには、かなりきちんとした方法は、多くの人がすぐに明らかに見つからないことがあります11000100.

おかげ

+0

[こちらはAPIのドキュメントです](http://en.cppreference.com/w/cpp/utility/bitset)私はあなたがそれを理解することができると確信しています。 – StoryTeller

+0

私はそれをシフトしようとしましたが、私は0000000000000000000000011000100を表示することができました。私は0を取り除こうとしています。私はそれが少年問題だと理解していますが、私はちょうどコードする方法を考え出しています。 –

答えて

2

が表示されます。

数値から1を減算すると、現在設定されている最下位ビットがリセットされ、すべての下位ビットが設定されます。

unsigned x = 0b10110111011110111101111011000100; 

unsigned m = 8; 

unsigned mask = (1 << m) - 1; 

unsigned result = x & mask; 

は、私は同じ基本的な考え方をレンダリングするためにあなたにそれを残しておきます:

ので、一瞬bitset部分を無視して、いくつかの整数型でのみ扱う、我々はこのような何かを行うことができますstd::bitsetオペレータ。

あなたの意図は、あなたがこのような何かので、もし、申し訳ありません...よく、先行ゼロなしでビットセットを表示するには、それが直接それをサポートしていない場合には:

std::bitset<15> x; 

std::cout << x; 

あなた'LLを常には、ゼロになる数に関係なく、正確に15文字の出力を得ます。 (またはbitsetstringstreamに書き込んで、先行ゼロを切り捨てる)コードを書くのはかなり簡単です。

+0

私はそれを解決することができた、ありがとう! –

関連する問題