Ich habe eine std::bitset
und der Bitset-Typ bietet auch eine to_ulong
-Methode, um das Bitset in eine Zahl zu übersetzen, mein Problem ist über das Bitset in eine Zahl zu übersetzen, nur einen Bereich in diesem Bitset berücksichtigen, muss ich meine eigene Powerof2-Funktion implementieren oder gibt es etwas mit einem Standardansatz?Wie konvertiert man eine Bereichsuntermenge von Bits in einem C++ - Bitset in eine Zahl?
8
A
Antwort
5
Sie können die unnötigen Bits wie
#include <bitset>
#include <iostream>
// drop bits outside the range [R, L) == [R, L - 1]
template<std::size_t R, std::size_t L, std::size_t N>
std::bitset<N> project_range(std::bitset<N> b)
{
static_assert(R <= L && L <= N, "invalid bitrange");
b >>= R; // drop R rightmost bits
b <<= (N - L + R); // drop L-1 leftmost bits
b >>= (N - L); // shift back into place
return b;
}
int main()
{
std::bitset<8> b2(42); // [0,0,1,0,1,0,1,0]
std::cout << project_range<0,8>(b2).to_ulong() << "\n"; // 42 == entire bitset
std::cout << project_range<2,5>(b2).to_ulong() << "\n"; // 8, only middle bit
}
Live example mit Ausgang fallen.
1
Sie können string
als Zwischenspeicher verwenden:
bitset<32> bs (string("1011"));
cout << bs.to_ullong() << endl;
// take a range - 2 last bits in this case
string s = bs.to_string().substr(bs.size() - 2);
bitset<32> bs1 (s);
cout << bs1.to_ullong() << endl;
Drucke:
11 3
+0
nice Optionen zu haben, aber ich denke, dass dies unnötige temporäre Variablen erstellt. Ich muss meine Schritte auf eine sehr kleine Zahl reduzieren. – user2485710
Verwandte Themen
- 1. Wie konvertiert man eine Zeichenfolge in Bits in C#
- 2. Wie konvertiert man String in Bitset?
- 3. Wie konvertiert man eine Zeichenkette in eine Ganzzahl in C#
- 4. Bash: Wie konvertiert man eine Zahl in eine Monatszeichenfolge?
- 5. Wie konvertiert man DateTime in eine Zahl in MySQL?
- 6. Wie BitSet als Folge von Bits
- 7. Best C++ Weg zufällig Position des gesetzten Bits in Bitset
- 8. Tensorflow: Wie konvertiert man NaNs in eine Zahl?
- 9. Wie konvertiert man einen tkinter Eintrag in eine ganze Zahl
- 10. Wie konvertiert man eine Zahl in ein ASCII-Zeichen?
- 11. Wie konvertiert man eine negative Zahl in ein positives?
- 12. Wie konvertiert man eine Zeichenfolge in einen Strom von Bits in Java
- 13. Wie implementiert man ein Bitset in C?
- 14. Wie konvertiert man Hex-Zahl in Swift?
- 15. In C#, Wie konvertiert man eine hexadezimale Zeichenfolge in int?
- 16. Wie kopiert man Bits von einer Variablen in eine andere?
- 17. Wie konvertiert man eine numerische Zeichenfolge in Zahl (Dezimal) und Zahl in Zeichenfolge
- 18. Wie konvertiert man eine MAC-Adresse (in einem Array) in eine Zeichenfolge in C?
- 19. Java - Wie konvertiert man Buchstaben in einem String in eine Zahl?
- 20. Wie konvertiert man eine Wörterbuchliste in dict?
- 21. Wie konvertiert man Hex-Zahl in Farbe?
- 22. Wie verteilt man Bits in einem Byte?
- 23. Verwendung von kleiner ganzer Zahl mit Bits Operator in C
- 24. JSON-Parser in Java konvertiert automatisch eine Zeichenfolge in eine Zahl/ganze Zahl
- 25. Wie konvertiert man eine Eingabezeichenfolge in Großbuchstaben in C#
- 26. Wie konvertiert man ein Recordset in eine Tabelle in C#
- 27. Schreiben von 'Bits' in C++ - Dateiströme
- 28. Wie man Bits in C++ richtig verschiebt?
- 29. Kann ich bestimmte Bits eine ganze Zahl in R angeben?
- 30. Wie man eine Zahl aufrundet
@ user2485710 machte ich einige Fehler in der Originalversion. Dieser ist getestet, siehe Live-Beispiel. – TemplateRex
warten, funktioniert nicht für mich, in diesem Fall http://ideone.com/RNJXNH mein Programm sollte 15 drucken, druckt es 120, weil es nicht die am weitesten rechts liegenden Bits fallen lassen ... – user2485710
@ user2485710 Bits [3, 7) * als eine Teilmenge von [0,32) * stellt 120 dar, wenn Sie die anderen 3 Bits rechts verschieben, erhalten Sie 15. Wenn dies das gewünschte Verhalten ist, ändern Sie einfach die letzte Anweisung in: 'b >> = (num - l + r); ' – TemplateRex