SlideShare a Scribd company logo
1 of 7
Download to read offline
C++14

2進数リテラル

高橋 晶(Akira Takahashi)
faithandbrave@longgate.co.jp
2013/10/26(土) C++14規格レビュー勉強会
はじめに
•

この発表は、C++14のコア言語に導入される予定の
「2進数リテラル (binary literals)」に関するレビュー資料です。

•

提案文書:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3472.pdf

•

日本語訳:
https://dl.dropboxusercontent.com/u/1682460/translation/C%2B%2B14/
n3472_binary_literals.html
概要
•

EWG(Evolution Working Group)は、2012年10月に開催されたポート
ランド会議にて、コア言語に2進数リテラルのサポートを追加することを
決定した。

•

2進数リテラルは、整数リテラルに0bもしくは0Bプレフィックスを付け
る。

•
•

これはGCCとClangではだいぶ前から拡張機能としてサポートしている。
Java 7、Python、Dといった言語も、同じ構文を持っている。
2つのプレフィックス
•

0bと0Bに違いはない。(16進数リテラルの0x/0Xと一緒)

•

リテラルとして記述できるのは、0か1のみ。

int a = 0b1000; // a == 8
int b = 0B1000; // b == 8
ユーザー定義リテラルのサポート
•

他のすべての整数リテラルと同様、2進数リテラルはユーザー定義リテラ
ルをサポートする。
#include <iostream>
#include <string>
#include <bitset>
std::string operator"" _binstr(unsigned long long x)
{
return std::bitset<8>(x).to_string();
}
int main()
{
std::string x = 0b1000_binstr;
std::cout << x << std::endl; // 00001000が出力される
}
この提案に含まれないもの

•

printf()での書式、およびIOstreamでのマニピュレータは、この提案に
は含まれない。

•

printf()はC言語互換ライブラリであり、C++のスコープ外。

•

GCCでも2進数書式は定義されていない。

•

IOstreamはLWG(Library Working Group)の作業であるため、まずはコ
ア言語のサポートから。

•

2進数表記で出力したい場合は、std::bitsetクラスを使用すればよい。
参照

•

GCC
http://gcc.gnu.org/onlinedocs/gcc/Binary-constants.html

•

D言語
http://www.digitalmars.com/d/1.0/lex.html#Integer

•

Python
http://docs.python.org/release/3.2.3/reference/
lexical_analysis.html#integerliterals

•

Java 7
http://docs.oracle.com/javase/7/docs/technotes/guides/language/
binary-literals.html

More Related Content

Viewers also liked

GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)智啓 出川
 
2015年度GPGPU実践プログラミング 第2回 GPUのアーキテクチャとプログラム構造
2015年度GPGPU実践プログラミング 第2回 GPUのアーキテクチャとプログラム構造2015年度GPGPU実践プログラミング 第2回 GPUのアーキテクチャとプログラム構造
2015年度GPGPU実践プログラミング 第2回 GPUのアーキテクチャとプログラム構造智啓 出川
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14Ryo Suzuki
 
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core GuidelinesBoost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core GuidelinesShintarou Okada
 
ネットにおける多言語コミュニケーションの新展開
ネットにおける多言語コミュニケーションの新展開ネットにおける多言語コミュニケーションの新展開
ネットにおける多言語コミュニケーションの新展開SKword Co.,Ltd.
 

Viewers also liked (7)

GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)
 
2015年度GPGPU実践プログラミング 第2回 GPUのアーキテクチャとプログラム構造
2015年度GPGPU実践プログラミング 第2回 GPUのアーキテクチャとプログラム構造2015年度GPGPU実践プログラミング 第2回 GPUのアーキテクチャとプログラム構造
2015年度GPGPU実践プログラミング 第2回 GPUのアーキテクチャとプログラム構造
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core GuidelinesBoost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
 
C++ マルチスレッド 入門
C++ マルチスレッド 入門C++ マルチスレッド 入門
C++ マルチスレッド 入門
 
ネットにおける多言語コミュニケーションの新展開
ネットにおける多言語コミュニケーションの新展開ネットにおける多言語コミュニケーションの新展開
ネットにおける多言語コミュニケーションの新展開
 
よいコード、わるいコード
よいコード、わるいコードよいコード、わるいコード
よいコード、わるいコード
 

More from Akira Takahashi (20)

Cpp20 overview language features
Cpp20 overview language featuresCpp20 overview language features
Cpp20 overview language features
 
Cppmix 02
Cppmix 02Cppmix 02
Cppmix 02
 
Cppmix 01
Cppmix 01Cppmix 01
Cppmix 01
 
Modern C++ Learning
Modern C++ LearningModern C++ Learning
Modern C++ Learning
 
cpprefjp documentation
cpprefjp documentationcpprefjp documentation
cpprefjp documentation
 
C++1z draft
C++1z draftC++1z draft
C++1z draft
 
Boost tour 1_61_0 merge
Boost tour 1_61_0 mergeBoost tour 1_61_0 merge
Boost tour 1_61_0 merge
 
Boost tour 1_61_0
Boost tour 1_61_0Boost tour 1_61_0
Boost tour 1_61_0
 
error handling using expected
error handling using expectederror handling using expected
error handling using expected
 
Boost tour 1.60.0 merge
Boost tour 1.60.0 mergeBoost tour 1.60.0 merge
Boost tour 1.60.0 merge
 
Boost tour 1.60.0
Boost tour 1.60.0Boost tour 1.60.0
Boost tour 1.60.0
 
Boost container feature
Boost container featureBoost container feature
Boost container feature
 
Boost Tour 1_58_0 merge
Boost Tour 1_58_0 mergeBoost Tour 1_58_0 merge
Boost Tour 1_58_0 merge
 
Boost Tour 1_58_0
Boost Tour 1_58_0Boost Tour 1_58_0
Boost Tour 1_58_0
 
C++14 solve explicit_default_constructor
C++14 solve explicit_default_constructorC++14 solve explicit_default_constructor
C++14 solve explicit_default_constructor
 
C++14 enum hash
C++14 enum hashC++14 enum hash
C++14 enum hash
 
Multi paradigm design
Multi paradigm designMulti paradigm design
Multi paradigm design
 
Start Concurrent
Start ConcurrentStart Concurrent
Start Concurrent
 
Programmer mind
Programmer mindProgrammer mind
Programmer mind
 
Boost.Study 14 Opening
Boost.Study 14 OpeningBoost.Study 14 Opening
Boost.Study 14 Opening
 

C++14 binary literals