Espacios de nombres
Variantes
Acciones

std::bit_floor

De cppreference.com
< cpp‎ | numeric
 
 
 
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

#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)[editar]
(C++20)
Calcula el resultado de la rotación derecha de bits
(plantilla de función)[editar]
(C++20)
Encuentra el número de bits más pequeño que se necesitan para representar el valor dado
(plantilla de función)[editar]
Compureba si un número es una potencia entera de dos
(plantilla de función)[editar]
close