最終更新日時: 2026年04月06日 11時49分40秒 (JST)
Akira Takahashi が更新

履歴 編集

function template
<bit>

# std::countl_zero(C++20)

    namespace std {
      template <class T>
      constexpr int countl_zero(T x) noexcept;
    }

## 概要

左から連続した0のビットを数える。

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

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

## 戻り値

値`x`の、最上位ビット (MSB, most significant bit) から開始して連続した0ビットの数を返す。

`x == 0`の場合、符号なし整数型`T`のビット数が返る。

## 例外

投げない

## 備考

- この関数は、ハードウェア機能として提供されている場合がある
- GCCの組み込み関数として`__builtin_clz()`、`__builtin_clzl()`、`__builtin_clzll()`が定義されていた

## 例

    #include <cassert>
    #include <bit>
    #include <cstdint>

    int main()
    {
      auto i = static_cast<std::uint32_t>(0b0001'0000'0000'0000'0000'0000'0000'0000u);
      int n = std::countl_zero(i);
      assert(n == 3);

      assert(std::countl_zero(static_cast<std::uint32_t>(0b1000'0000'0000'0000'0000'0000'0000'0000u)) == 0);
      assert(std::countl_zero(static_cast<std::uint32_t>(0b0100'0000'0000'0000'0000'0000'0000'0000u)) == 1);
      assert(std::countl_zero(static_cast<std::uint32_t>(0u)) == 32);
    }

### 出力

## バージョン

### 言語

- C++20

### 処理系

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

## 関連項目

- `stdc_leading_zeros` - C互換のビット操作関数

## 参照

- P0553R4 Bit operations