Espacios de nombres
Variantes
Acciones

std::bit_ceil

De cppreference.com
< cpp‎ | numeric
 
 
 
Definido en el archivo de encabezado <bit>
template<class T >
constexpr T bit_ceil( T x );
(desde C++20)

Calcula la potencia entera más pequeña de dos que no sea menor que x.

Si ese valor no se puede representar en T, el comportamiento no está definido. La llamada a esta función está permitida en la evaluación constante solo si no se produce el comportamiento no definido.

Esta sobrecarga solo participa en la resolución de sobrecargas si T es un tipo entero sin signo (es decir, unsignedchar, unsignedshort, unsignedint, unsignedlong, unsignedlonglong, o un tipo entero sin signo extendido).

Contenido

[editar]Parámetros

x - Valor del tipo entero sin signo.

[editar]Valor de retorno

La potencia entera más pequeña de dos que no sea menor que x.

[editar]Excepciones

No lanza nada.

[editar]Notas

Macro de Prueba de característica
__cpp_lib_int_pow2

[editar]Posible implementación

Véanse posibles implementaciones en libstdc++ (gcc) y libc++ (clang)

template<std::unsigned_integral T> requires !std::same_as<T, bool>&&!std::same_as<T, char>&&!std::same_as<T, char8_t>&&!std::same_as<T, char16_t>&&!std::same_as<T, char32_t>&&!std::same_as<T, wchar_t>constexpr T bit_ceil(T x)noexcept{if(x <= 1u)return T(1);ifconstexpr(std::same_as<T, decltype(+x)>)return T(1)<<std::bit_width(T(x -1));else{// para tipos sujetos a promoción de enterosconstexprint offset_for_ub =std::numeric_limits<unsigned>::digits-std::numeric_limits<T>::digits;return T(1u <<(std::bit_width(T(x -1))+ offset_for_ub)>> offset_for_ub);}}

[editar]Ejemplo

#include <bit>#include <bitset>#include <iostream>   auto main()->signedint// :(){using bin =std::bitset<8>;   for(unsigned x{0}; x !=10;++x){unsignedconst z = std::bit_ceil(x);// `ceil2` antes de P1956R1   std::cout<<"bit_ceil( "<< bin(x)<<" ) = "<< bin(z)<<'\n';}}

Salida:

bit_ceil( 00000000 ) = 00000001 bit_ceil( 00000001 ) = 00000001 bit_ceil( 00000010 ) = 00000010 bit_ceil( 00000011 ) = 00000100 bit_ceil( 00000100 ) = 00000100 bit_ceil( 00000101 ) = 00001000 bit_ceil( 00000110 ) = 00001000 bit_ceil( 00000111 ) = 00001000 bit_ceil( 00001000 ) = 00001000 bit_ceil( 00001001 ) = 00010000

[editar]Véase también

(C++20)
Encuentra la potencia a dos más grande que no es mayor que el valor dado
(plantilla de función)[editar]
close