yohhoyの日記

技術的メモをしていきたい日記

2進数フォーマット出力 in 標準C

プログラミング言語Cの次期C2x(C23)標準ライブラリのprintf関数ファミリでは、変換指定子bによる2進数フォーマット出力がサポートされる。同時にscanf関数ファミリやstrtoT関数では0bプレフィクス付き文字列入力がサポートされる。*1

// C2x
#include <stdio.h>

printf("%08b", 42u);
// "00101010"

C++言語

C++20で追加されたstd::formatはバイナリ書式化指定子bをサポート済み。

// C++20
#include <format>
#include <iostream>

std::cout << std::format("{:08b}", 42u);
// "00101010"

C++17以前はstd::bitsetで手軽に済ませるか、書式化処理を自作する必要あり。

#include <bitset>
std::cout << std::bitset<8>(42u);

関連URL

*1:提案文書N2630によれば、C2xでの2進数リテラルのサポート(→id:yohhoy:20210228)に合わせた機能追加とのこと。もっと早くからサポートしてくれ。