std::shr
Из ru.cppreference.net
| Определён в заголовке <bit>
|
||
template< class T, class S >
constexpr T shr( T x, S s ) noexcept;
|
(начиная с C++29) | |
Возвращает ⌊x · 2-s
⌋ округлённое в сторону отрицательной бесконечности и усечённое, чтобы поместиться в T.
Параметры
| x | - | значение беззнакового целого типа |
| s | - | количество позиций для сдвига |
Возвращаемое значение
⌊x · 2-s
⌋ усечённое до типа результата.
Примечания
В отличие от оператора >>, std::shr никогда не вызывает неопределённого поведения.
Сдвиг выполняется так, как если бы производился сдвиг вправо на один бит s раз, или сдвиг влево на один бит -s раз, если s отрицательно, за исключением того, что -s не может вызвать переполнение.
| Макрос проверки функции макрос | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_bitops |
202606L |
(C++29) | Улучшенный сдвиг |
Возможная реализация
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;
}
|
Пример
| Этот раздел неполон Причина: нет примера |
Смотреть также
(C++29) |
сдвигает влево без возможности неопределённого поведения (шаблон функции) |
(C++20) |
вычисляет результат побитового вращения влево (шаблон функции) |
(C++20) |
вычисляет результат побитового вращения вправо (шаблон функции) |