std::shr
De es.cppreference.net
| Definido en el encabezado <bit>
|
||
template< class T, class S >
constexpr T shr( T x, S s ) noexcept;
|
(desde C++29) | |
Devuelve ⌊x · 2-s
⌋ redondeado hacia el infinito negativo, y truncado para que quepa en T.
Parámetros
| x | - | valor de tipo entero sin signo |
| s | - | número de posiciones a desplazar |
Valor de retorno
⌊x · 2-s
⌋ truncado al tipo de resultado.
Notas
A diferencia del operador >>, std::shr nunca tiene comportamiento indefinido.
El desplazamiento se realiza como si se desplazara a la derecha un solo bit s veces, o como si se desplazara a la izquierda un solo bit -s veces si s es negativo, excepto que -s no puede desbordarse.
| Macro de prueba de característica | Valor | Estándar | Característica |
|---|---|---|---|
__cpp_lib_bitops |
202606L |
(C++29) | Mejor desplazamiento |
Posible implementación
template<class T, class S> // TODO: constraints
constexpr T shr(T x, S s) noexcept
{
constexpr auto width = S(std::numeric_limits<std::make_unsigned_t<T>>::digits);
if constexpr (std::is_signed_v<S>)
{
if (s < 0)
return s <= -width ? T(0) : x << -s;
}
return s >= width ? T(x < 0 ? -1 : 0) : x >> s;
}
|
Ejemplo
| Esta sección está incompleta Razón: sin ejemplo |
Véase también
(C++29) |
desplaza a la izquierda sin posibilidad de comportamiento indefinido (plantilla de función) |
(C++20) |
calcula el resultado de la rotación bit a bit hacia la izquierda (plantilla de función) |
(C++20) |
calcula el resultado de la rotación bit a bit hacia la derecha (plantilla de función) |