標準演進
- C/C++ 早期無二進制字面值,GCC/Clang/MSVC 擴展支持
0b1010。
- C++14 正式納入標準:
0b1010 / 0B1010。
- C++11 引入用戶定義字面值,可自定義
1010_B 後綴。
多種表示方法
- 標準字面值:
int x = 0b101010; (C++14)
- strtol 系列:
strtol("101010", nullptr, 2)
- std::bitset:
bitset<8>("101010"),支持自定義 0/1 字符(如培根密碼 'A'/'B')。
- Boost:
BOOST_BINARY(100 111000) 可分組易讀。
- 模板元編程:編譯期計算
binary<101010>::value(注意八進制陷阱)。
- 用戶定義字面值:
constexpr int operator""_B(unsigned long long n) { ... },使用 101010_B。
代碼示例
// C++14
int a = 0b1010; // 10
// bitset 自定義字符
bitset<5> bacon("ABABB", 0, string::npos, 'A', 'B'); // 01011
// UDL (C++11)
constexpr int operator""_B(unsigned long long n) {
int v=0, base=1;
while (n) { v += (n%10)*base; n/=10; base*=2; }
return v;
}
static_assert(101010_B == 42);