- bit[meta header]
- std[meta namespace]
- function template[meta id-type]
- cpp20[meta cpp]
namespace std {
template <class T>
[[nodiscard]]
constexpr T rotr(T x, int s) noexcept; // (1) C++20
template <class T>
constexpr T rotr(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
が負である場合はrotl
(x, -r)
が返る
投げない
- この関数は、ハードウェア機能として提供されている場合がある
#include <cassert>
#include <bit>
#include <cstdint>
int main()
{
auto i = static_cast<std::uint32_t>(0b0000'0000'0000'0000'0000'0000'0000'1000u);
std::uint32_t a = std::rotr(i, 4);
assert(a == 0b1000'0000'0000'0000'0000'0000'0000'0000u);
std::uint32_t b = std::rotr(i, -4);
assert(b == 0b0000'0000'0000'0000'0000'0000'1000'0000u);
}
- std::rotr[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で