std::bit_width
| 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
|
(C++20)
|
compte le nombre de bits
0
consécutifs, en commençant par le bit le plus significatif
(modèle de fonction) |