- bit[meta header]
- std[meta namespace]
- function template[meta id-type]
- cpp20[meta cpp]
namespace std {
template <class T>
[[nodiscard]]
constexpr T rotl(T x, int s) noexcept; // (1) C++20
template <class T>
constexpr T rotl(T x, int s) noexcept; // (1) C++26
}左循環ビットシフト。
値xをシフト量sだけ左に循環シフトする。
- 型
Tが符号なし整数型であること
符号なし整数型Tのビット数をN、s % Nをrであるとして。
rが0である場合はxが返るrが正である場合は(x << r) | (x >> (N - r))が返るrが負である場合はrotr(x, -r)が返る
投げない
- この関数は、ハードウェア機能として提供されている場合がある
#include <cassert>
#include <bit>
#include <cstdint>
int main()
{
auto i = static_cast<std::uint32_t>(0b0001'0000'0000'0000'0000'0000'0000'0000u);
std::uint32_t a = std::rotl(i, 4);
assert(a == 0b0000'0000'0000'0000'0000'0000'0000'0001u);
std::uint32_t b = std::rotl(i, -4);
assert(b == 0b0000'0001'0000'0000'0000'0000'0000'0000u);
}- std::rotl[color ff0000]
- C++20
- Clang: 9.0 [mark verified]
- GCC: 9.2 [mark verified]
- Visual C++: ??
- P0553R4 Bit operations
- P2422R1 Remove
nodiscardannotations from the standard library specification- C++26で
[[nodiscard]]指定が削除された
- C++26で