- 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]
- std::uint32_t[link /reference/cstdint/uint32_t.md]
- C++20
- Clang: 9.0 [mark verified]
- GCC: 9.2 [mark verified]
- Visual C++: ??
- P0553R4 Bit operations
- P2422R1 Remove
nodiscard
annotations from the standard library specification- C++26で
[[nodiscard]]
指定が削除された
- C++26で