std::shl
Von de.cppreference.net
| Definiert in Header <bit>
|
||
template< class T, class S >
constexpr T shl( T x, S s ) noexcept;
|
(seit C++29) | |
Gibt zurück ⌊x · 2s
⌋ gerundet gegen 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 · 2s
⌋ abgeschnitten auf den Ergebnistyp.
Anmerkungen
Anders als der << Operator, hat std::shl nie undefiniertes Verhalten.
Die Verschiebung erfolgt, als ob um ein einzelnes Bit nach links verschoben würde s Mal, oder um ein einzelnes Bit nach rechts verschoben würde -s Mal, falls s negativ ist, außer dass -s nicht überlaufen kann.
| Feature-Test Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_bitops |
202606L |
(C++29) | Besseres Verschieben |
Mögliche Implementierung
template<class T, class S> // TODO: constraints
constexpr T shl(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(x < 0 ? -1 : 0) : x >> -s;
}
return s >= width ? T(0) : x << s;
}
|
Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
Siehe auch
(C++29) |
verschiebt nach rechts ohne die Möglichkeit von undefiniertem Verhalten (Funktionsschablone) |
(C++20) |
berechnet das Ergebnis einer bitweisen Linksrotation (Funktionsschablone) |
(C++20) |
berechnet das Ergebnis einer bitweisen Rechtsrotation (Funktionsschablone) |