Namensräume
Varianten
Aktionen

std::bit_width

Von cppreference.com
< cpp‎ | numeric
 
 
Dienstprogramm-Bibliotheken
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Coroutine-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Drei-Wege-Vergleich
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

Allgemeine Hilfsmittel
Relationale Operatoren (in C++20 veraltet)
 
Bitmanipulation
(C++20)
(C++23)
Ganzzahlige Zweierpotenzen
(C++20)
(C++20)
bit_width
(C++20)
Rotation
(C++20)
(C++20)
Zählen
(C++20)
(C++20)
(C++20)
Endianheit
(C++20)
 
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

#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

zählt die Anzahl aufeinanderfolgender 0-Bits, beginnend mit dem höchstwertigen Bit
(Funktion-Template) [bearbeiten]