Namespaces
Variants

std:: bit_width

From cppreference.net
Utilities library
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(log 2 (x)) . Si x es cero, retorna 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).

Contenidos

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)