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

履歴 編集

<stdbit.h>

# stdbit.h(C++26)

`<stdbit.h>`はC23で追加されたビット操作ライブラリをC++から使用するための互換ヘッダである。

C言語では型総称マクロ (type-generic macro) として提供される汎用関数が、C++では関数テンプレートとして提供される。型別の関数 (`_uc`, `_us`, `_ui`, `_ul`, `_ull`サフィックス) はCと共通のインタフェースである。

このヘッダで宣言される関数およびマクロは`std`名前空間に属さず、グローバル名前空間に定義される。C++の対応するヘッダとして`<cstdbit>`は提供されない。これは、C言語との相互運用性を重視し、CとC++の両方でコンパイル可能なコードを記述できるようにするためである。

C++固有のビット操作機能が必要な場合は、`<bit>`ヘッダの使用を推奨する。

## マクロ

名前 | 説明 | 対応バージョン
--- | --- | ---
`__STDC_VERSION_STDBIT_H__` | ヘッダのバージョン (`202311L`) | C++26
`__STDC_ENDIAN_BIG__` | ビッグエンディアンを表す定数 | C++26
`__STDC_ENDIAN_LITTLE__` | リトルエンディアンを表す定数 | C++26
`__STDC_ENDIAN_NATIVE__` | 実行環境のエンディアンを表す定数 | C++26

## 先頭のビットカウント

名前 | 説明 | 対応バージョン
--- | --- | ---
`stdc_leading_zeros` | 左から連続した0のビットを数える (function template) | C++26
`stdc_leading_ones` | 左から連続した1のビットを数える (function template) | C++26

## 末尾のビットカウント

名前 | 説明 | 対応バージョン
--- | --- | ---
`stdc_trailing_zeros` | 右から連続した0のビットを数える (function template) | C++26
`stdc_trailing_ones` | 右から連続した1のビットを数える (function template) | C++26

## 先頭のビット位置検索

名前 | 説明 | 対応バージョン
--- | --- | ---
`stdc_first_leading_zero` | 左から最初の0のビット位置を求める (function template) | C++26
`stdc_first_leading_one` | 左から最初の1のビット位置を求める (function template) | C++26

## 末尾のビット位置検索

名前 | 説明 | 対応バージョン
--- | --- | ---
`stdc_first_trailing_zero` | 右から最初の0のビット位置を求める (function template) | C++26
`stdc_first_trailing_one` | 右から最初の1のビット位置を求める (function template) | C++26

## ビット数カウント

名前 | 説明 | 対応バージョン
--- | --- | ---
`stdc_count_zeros` | 0のビットを数える (function template) | C++26
`stdc_count_ones` | 1のビットを数える (function template) | C++26

## 2の累乗整数

名前 | 説明 | 対応バージョン
--- | --- | ---
`stdc_has_single_bit` | 1ビットだけ立っている値をもっているか判定する (function template) | C++26
`stdc_bit_width` | 値を表現するために必要なビット幅を求める (function template) | C++26
`stdc_bit_floor` | 整数値を2の累乗値に切り下げる (function template) | C++26
`stdc_bit_ceil` | 整数値を2の累乗値に切り上げる (function template) | C++26

## バージョン

### 言語

- C++26

### 処理系

- Clang: 21 ✅
- GCC: 15 ✅
- Visual C++: 2026 Update 2 ❌

## 関連項目

- `<bit>` - C++標準のビット操作ライブラリ

## 参照

- N3022 Modern Bit Utilities
- P3370R1 Add new C headers as C++ headers