最終更新日時(UTC):
が更新

履歴 編集

function template
<bit>

std::rotr

namespace std {
  template <class T>
  [[nodiscard]] constexpr T rotr(T x, int s) noexcept;
}

概要

右循環ビットシフト。

xをシフト量sだけ右に循環シフトする。

テンプレートパラメータ制約

  • Tが符号なし整数型であること

戻り値

符号なし整数型Tのビット数をNs % Nrであるとして。

  • 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);
}

出力

バージョン

言語

  • C++20

処理系

参照