std::bit_ceil
De cppreference.com
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
Ejecuta este código
#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) |