std::shl
Depuis fr.cppreference.net
| Défini dans l'en-tête <bit>
|
||
template< class T, class S >
constexpr T shl( T x, S s ) noexcept;
|
(depuis C++29) | |
Renvoie ⌊x · 2s
⌋ arrondi vers moins l'infini, et tronqué pour tenir dans T.
Paramètres
| x | - | valeur d'un type entier non signé |
| s | - | nombre de positions à décaler |
Valeur de retour
⌊x · 2s
⌋ tronqué au type de résultat.
Notes
Contrairement à l'opérateur <<, std::shl n'a jamais de comportement indéfini.
Le décalage s'effectue comme s'il s'agissait d'un décalage à gauche d'un seul bit s fois, ou d'un décalage à droite d'un seul bit -s fois si s est négatif, sauf que -s ne peut pas déborder.
| Macro de test de fonctionnalité macro | Valeur | Norme | Fonctionnalité |
|---|---|---|---|
__cpp_lib_bitops |
202606L |
(C++29) | Meilleur décalage |
Implémentation possible
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;
}
|
Exemple
| Cette section est incomplète Raison : pas d'exemple |
Voir aussi
(C++29) |
décale vers la droite sans possibilité de comportement indéfini (modèle de fonction) |
(C++20) |
calcule le résultat d'une rotation binaire vers la gauche (modèle de fonction) |
(C++20) |
calcule le résultat d'une rotation binaire vers la droite (modèle de fonction) |