Namespaces
Variants

std:: bit_width

From cppreference.net
Utilities library
Défini dans l'en-tête <bit>
template < class T >
constexpr int bit_width ( T x ) noexcept ;
(depuis C++20)

Si x n'est pas nul, calcule le nombre de bits nécessaires pour stocker la valeur x , c'est-à-dire, 1 + floor(log 2 (x)) . Si x est nul, retourne zéro.

Cette surcharge participe à la résolution de surcharge uniquement si T est un type entier non signé (c'est-à-dire, unsigned char , unsigned short , unsigned int , unsigned long , unsigned long long , ou un type entier non signé étendu).

Table des matières

Paramètres

x - valeur entière non signée

Valeur de retour

Zéro si x est nul ; sinon, un plus le logarithme en base 2 de x , avec toute partie fractionnaire rejetée.

Notes

Cette fonction est équivalente à return std:: numeric_limits < T > :: digits - std:: countl_zero ( x ) ; .

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_int_pow2 202002L (C++20) Opérations de puissance de 2 entières

Exemple

#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';
}

Sortie :

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

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR S'applique à Comportement publié Comportement corrigé
LWG 3656 C++20 le type de retour de bit_width est le même que le type de son argument de fonction modifié en int

Voir aussi

compte le nombre de bits 0 consécutifs, en commençant par le bit le plus significatif
(modèle de fonction)