std::bit_width
Von cppreference.com
| Definiert in Header <bit> |
||
| template< class T > constexpr int bit_width( T x ) noexcept; |
(seit C++20) | |
Wenn x nicht Null ist, berechnet dies die Anzahl der Bits, die zum Speichern des Werts x benötigt werden, d. h. 1 + floor(log2(x)). Wenn x Null ist, wird Null zurückgegeben.
Diese Überladung nimmt an der Überladungsauflösung teil, nur wenn T ein vorzeichenloser Ganzzahltyp ist (d.h. unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long oder ein erweiterter vorzeichenloser Ganzzahltyp).
Inhalt |
[edit] Parameter
| x | - | Vorzeichenloser Ganzzahlwert |
[edit] Rückgabewert
Null, wenn x Null ist; andernfalls eins plus der Zweierlogarithmus von x, wobei jeder Bruchteil verworfen wird.
[edit] Anmerkungen
Diese Funktion ist äquivalent zu return std::numeric_limits<T>::digits - std::countl_zero(x);.
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_int_pow2 |
202002L |
(C++20) | Operationen mit Zweierpotenzen |
[edit] Beispiel
Führen Sie diesen Code aus
#include <bit> #include <bitset> #include <iostream> int main() { for (unsigned x{}; x != 010; ++x) std::cout << "bit_width( " << std::bitset<4>{x} << " ) = " << std::bit_width(x) << '\n'; }
Ausgabe
bit_width( 0000 ) = 0 bit_width( 0001 ) = 1 bit_width( 0010 ) = 2 bit_width( 0011 ) = 2 bit_width( 0100 ) = 3 bit_width( 0101 ) = 3 bit_width( 0110 ) = 3 bit_width( 0111 ) = 3
[edit] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 3656 | C++20 | der Rückgabetyp von bit_width ist derselbe wie der Typ seines Funktionsarguments |
wurde zu int geändert |
[edit] Siehe auch
| (C++20) |
zählt die Anzahl aufeinanderfolgender 0-Bits, beginnend mit dem höchstwertigen Bit (Funktion-Template) |