最終更新日時: 2025年07月10日 10時26分30秒 (JST)
Koichi Murase が更新

履歴 編集

# 2進数リテラル [N3472](C++14)

このページはC++14に採用された言語機能の変更を解説しています。

のちのC++規格でさらに変更される場合があるため関連項目を参照してください。

## 概要

整数リテラルのプレフィックスとして`0b`もしくは`0B`を付けることで、2進数を表す値を記述できる。

    int x = 0b1010; // 2進数の値1010を表す。xの値は、10進数の値10となる

`0b`と`0B`に、機能としての違いはない。数値部分に入力できる数字は`0`と`1`のみである。

C++14段階では、整数を2進数表記で文字列化もしくはストリーム出力するための機能は含まれない。

2進数リテラルが追加されたことにより、C++14時点で規定される基数リテラルは以下のものとなった：

- 10進数リテラル(プレフィックスの指定なし)
- 16進数リテラル(`0x`もしくは`0X`をプレフィックスとして指定する)
- 8進数リテラル(`0`をプレフィックスとして指定する)
- 2進数リテラル(`0b`もしくは`0B`をプレフィックスとして指定する)

## 仕様

- 浮動小数点数を含まない、整数リテラルに対してのみ、2進数リテラルを使用できる
- 2進数リテラルを記述するには、`0b`もしくは`0B`プレフィックスを指定する
- 数値部分に入力できる数字・文字は`0`と`1`のみである
- 2進数リテラルは、リテラル演算子と組み合わせて使用できる

## 例

    #include <iostream>

    int main()
    {
      int x = 0b1010;
      std::cout << x << std::endl;

      // 数値リテラルの桁区切り文字と組み合わせて、4桁区切りする
      int y = 0b1000'1111;
      std::cout << y << std::endl;
    }

### 出力

    10
    143

## この機能が必要になった背景・経緯

`0b`／`0B`プレフィックスによる2進数リテラルは、GCCやClangの言語拡張として古くからサポートされていたほか、Java、Python、Dといった言語でも同じ構文でサポートされていた。

こういった経緯から、C++標準で2進数リテラルをサポートすることとなった。

## 関連項目

- C++14 数値リテラルの桁区切り文字
- `bitset`

## 参照

- N3472 - Binary Literals in the C++ Core Language