std::rotl
Определено в заголовке <bit> | ||
|---|---|---|
template< class T > [[nodiscard]] constexpr T rotl( T x, int s ) noexcept; | (с C++20) |
Вычисляет результат битового циклического сдвига влево значения x на s позиций. Эта операция также известна как левый циклический сдвиг.
Формально, пусть N равно std::numeric_limits<T>::digits, а r равно s % N.
- Если
rравно 0, возвращаетx; - если
rположительно, возвращает(x << r) | (x >> (N - r)); - если
rотрицательно, возвращаетstd::rotr(x, -r).
Этот перегруз участвует в разрешении перегрузки только если T является типом беззнакового целого числа (то есть unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long, или расширенным типом беззнакового целого числа).
Параметры
| x | - | значение беззнакового целого типа |
| s | - | количество позиций сдвига |
Значение результата
Результат битового циклического сдвига влево x на s позиций.
Примечания
| Макрос проверки наличия функции | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_bitops | 201907L | (C++20) | Битовые операции |
Пример
#include <bit>
#include <bitset>
#include <cstdint>
#include <iostream>
int main()
{
const std::uint8_t i = 0b00011101;
std::cout << "i = " << std::bitset<8>(i) << '\n';
std::cout << "rotl(i,0) = " << std::bitset<8>(std::rotl(i, 0)) << '\n';
std::cout << "rotl(i,1) = " << std::bitset<8>(std::rotl(i, 1)) << '\n';
std::cout << "rotl(i,4) = " << std::bitset<8>(std::rotl(i, 4)) << '\n';
std::cout << "rotl(i,9) = " << std::bitset<8>(std::rotl(i, 9)) << '\n';
std::cout << "rotl(i,-1) = " << std::bitset<8>(std::rotl(i, -1)) << '\n';
}Вывод:
i = 00011101 rotl(i,0) = 00011101 rotl(i,1) = 00111010 rotl(i,4) = 11010001 rotl(i,9) = 00111010 rotl(i,-1) = 10001110
См. также
|
(C++20) | вычисляет результат битового циклического сдвига вправо (шаблон функции) |
| выполняет сдвиг влево и сдвиг вправо (публичный метод std::bitset<N> ) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/rotl