std:: bit_width
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
(C++20)
|
||||
|
(C++23)
|
||||
| Integral powers of 2 | ||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
bit_width
(C++20)
|
||||
| Rotating | ||||
|
(C++20)
|
||||
|
(C++20)
|
||||
| Counting | ||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
| Endian | ||||
|
(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 + \lfloor \log_2(x) \rfloor\) 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
|
(C++20)
|
compte le nombre de bits
0
consécutifs, en commençant par le bit le plus significatif
(modèle de fonction) |