Namespaces
Variants

std::bit_width

De es.cppreference.net
 
 
Biblioteca de utilidades
Soporte del lenguaje
Soporte de tipos (tipos básicos, RTTI)
Macros de prueba de características de la biblioteca (C++20)
Utilidades de programa
Funciones variádicas
Soporte de corrutinas (C++20)
Soporte de contratos (C++26)
Comparación de tres vías
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilidades generales
Operadores relacionales (obsoleto en C++20)
 
 
Definido en el encabezado <bit>
template< class T >
constexpr int bit_width( T x ) noexcept;
(desde C++20)

Si x no es cero, calcula el número de bits necesarios para almacenar el valor x, es decir, 1 + floor(log2(x)). Si x es cero, devuelve cero.

Esta sobrecarga participa en la resolución de sobrecarga solo si T es un tipo entero sin signo (es decir, unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long, o un tipo entero sin signo extendido).

Parámetros

x - valor entero sin signo

Valor de retorno

Cero si x es cero; de lo contrario, uno más el logaritmo en base 2 de x , descartando cualquier parte fraccionaria.

Notas

Esta función es equivalente a return std:: numeric_limits < T > :: digits - std:: countl_zero ( x ) ; .

Macro de prueba de características Valor Estándar Característica
__cpp_lib_int_pow2 202002L (C++20) Operaciones de potencia de 2 enteras

Ejemplo

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

Salida:

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

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 3656 C++20 el tipo de retorno de bit_width es el mismo que el tipo de su argumento de función se cambió a int

Véase también

cuenta el número de bits ​ 0 ​ consecutivos, comenzando desde el bit más significativo
(plantilla de función)