• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    2進数リテラル [N3472]

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

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

    概要

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

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

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

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

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

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

    仕様

    • 浮動小数点数を含まない、整数リテラルに対してのみ、2進数リテラルを使用できる
    • 2進数リテラルを記述するには、0bもしくは0Bプレフィックスを指定する
    • 数値部分に入力できる数字・文字は01のみである
    • 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
    

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

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

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

    関連項目

    参照