std::bit_floor
De cppreference.com
Definido en el archivo de encabezado <bit> | ||
template<class T > constexpr T bit_floor( T x )noexcept; | (desde C++20) | |
Si x
no es cero, calcula la mayor potencia entera de dos que no sea mayor que x
. Si x
es cero, devuelve cero.
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
Cero si x
es cero; de lo contrario, la mayor potencia entera de dos que no sea mayor que x
.
[editar]Notas
Macro de Prueba de característica |
---|
__cpp_lib_int_pow2 |
[editar]Posible implementación
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_floor(T x)noexcept{if(x !=0)return T{1}<<(std::bit_width(x)-1);return0;} |
[editar]Ejemplo
Ejecuta este código
#include <bit>#include <bitset>#include <iostream> int main(){using bin =std::bitset<8>; for(unsigned x =0; x !=10;++x){autoconst z = std::bit_floor(x);// `floor2` ants de P1956R1 std::cout<<"bit_floor( "<< bin(x)<<" ) = "<< bin(z)<<'\n';}}
Salida:
bit_floor( 00000000 ) = 00000000 bit_floor( 00000001 ) = 00000001 bit_floor( 00000010 ) = 00000010 bit_floor( 00000011 ) = 00000010 bit_floor( 00000100 ) = 00000100 bit_floor( 00000101 ) = 00000100 bit_floor( 00000110 ) = 00000100 bit_floor( 00000111 ) = 00000100 bit_floor( 00001000 ) = 00001000 bit_floor( 00001001 ) = 00001000
[editar]Véase también
(C++20) | Encuentra la potencia a dos entera más pequeña que no es menor que el valor dado (plantilla de función) |
(C++20) | Calcula el resultado de la rotación derecha de bits (plantilla de función) |
(C++20) | Encuentra el número de bits más pequeño que se necesitan para representar el valor dado (plantilla de función) |
(C++20) | Compureba si un número es una potencia entera de dos (plantilla de función) |