Namespaces
Variants

std::bit_width

Depuis fr.cppreference.net
 
 
Bibliothèque d'utilitaires
Support linguistique
Support de types (types de base, RTTI)
Macros de test de fonctionnalités de la bibliothèque (C++20)
Utilitaires de programme
Fonctions variadiques
Support des coroutines (C++20)
Support des contrats (C++26)
Comparaison à trois voies
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilitaires généraux
Opérateurs relationnels (obsolète en C++20)
 
 
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(log2(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).

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)