Skip to content

Latest commit

 

History

History
65 lines (44 loc) · 2.27 KB

binary_literals.md

File metadata and controls

65 lines (44 loc) · 2.27 KB

2進数リテラル

  • cpp14[meta cpp]

概要

整数リテラルのプレフィックスとして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進数リテラルをサポートすることとなった。

関連項目

参照