最終更新日時(UTC): 2025年07月08日 15時33分39秒
Akira Takahashi が更新

履歴 編集

function template
<bit>

# std::rotl(C++20)

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

### 出力

## バージョン

### 言語

- C++20

### 処理系

- Clang: 9.0 ✅
- GCC: 9.2 ✅
- Visual C++: ??

## 参照

- P0553R4 Bit operations
- P2422R1 Remove `nodiscard` annotations from the standard library specification
  - C++26で`[[nodiscard]]`指定が削除された