2017-12-21 8 views
-3

Gegeben ein bestimmtes Bitset < 32>, wie wähle ich die m LSB-Bits des Bitsets aus und zeige sie an? m ist ein ganzzahliger Wert.Auswählen bestimmter Bereichs-Bits aus einem Bitset und Anzeigen

zum Beispiel habe ich 10110111011110111101111011000100 und m = 8, sollte der Code 11000100.

Dank Anzeige

+0

[Hier ist eine Dokumentation der API] (http://en.cppreference.com/w/cpp/utility/bitset). Ich bin sicher, du kannst es herausfinden. – StoryTeller

+0

Ich versuchte es zu verschieben und ich konnte 000000000000000000000000011000100 anzeigen. Ich versuche, die 0s loszuwerden. Ich verstehe, dass es eine jugendliche Frage ist, aber ich finde nur heraus, wie man programmiert. –

Antwort

2

Es ist eine ziemlich nette Art und Weise, dies zu tun, dass viele Menschen nicht sofort offensichtlich finden.

Es hängt von der Tatsache ab, dass das Subtrahieren von eins von einer Zahl das aktuell niedrigstwertige Bit zurücksetzt und alle weniger signifikanten Bits einstellt.

So, das bitset Teil für den Moment ignoriert, und nur mit einigem Integer-Typ handelt, können wir etwas tun:

unsigned x = 0b10110111011110111101111011000100; 

unsigned m = 8; 

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

unsigned result = x & mask; 

ich es Ihnen überlassen würde das gleiche Grundidee zu machen std::bitset Betreiber.

Wenn Ihre Absicht ist es, eine bitset ohne führende Nullen angezeigt werden, gut ... sorry, aber es nicht, dass direkt unterstützen, so dass, wenn Sie etwas tun:

std::bitset<15> x; 

std::cout << x; 

Sie über immer erhalten genau 15 Zeichen der Ausgabe, unabhängig davon, wie viele (oder wenige) davon sind Nullen. Es ist ziemlich einfach, Code zu schreiben, um die führenden Nullen auf eigene Faust zu überspringen (oder die bitset zu einem stringstream zu schreiben, dann schneiden Sie die führenden Nullen ab).

+0

Ich konnte es lösen, Danke! –

Verwandte Themen