std::shr
Aus de.cppreference.net
| Definiert in Header <bit>
|
||
template< class T, class S >
constexpr T shr( T x, S s ) noexcept;
|
(seit C++29) | |
Gibt ⌊x · 2-s
⌋ gerundet in Richtung minus unendlich und abgeschnitten, um in T zu passen.
Parameter
| x | - | Wert eines vorzeichenlosen Integer-Typs |
| s | - | Anzahl der zu verschiebenden Positionen |
Rückgabewert
⌊x · 2-s
⌋ auf den Ergebnistyp abgeschnitten.
Hinweise
Im Gegensatz zum >>-Operator hat std::shr niemals undefiniertes Verhalten.
Das Verschieben erfolgt so, als ob s Mal um ein einzelnes Bit nach rechts verschoben würde, oder -s Mal um ein einzelnes Bit nach links, wenn s negativ ist, mit dem Unterschied, dass -s nicht überlaufen kann.
| Feature-Test-Makro | Wert | Std | Funktion |
|---|---|---|---|
__cpp_lib_bitops |
202606L |
(C++29) | Besseres Verschieben |
Mögliche Implementierung
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;
}
|
Beispiel
| Dieser Abschnitt ist unvollständig Grund: Kein Beispiel |
Siehe auch
(C++29) |
verschiebt nach links ohne die Möglichkeit undefinierten Verhaltens (Funktionsschablone) |
(C++20) |
berechnet das Ergebnis einer bitweisen Linksrotation (Funktionsschablone) |
(C++20) |
berechnet das Ergebnis einer bitweisen Rechtsrotation (Funktionsschablone) |