C++ 2進数・16進数表示



2進数表示

概要

bitsetを使えばOKです。
bitsetライブラリを用意して、変数xをn桁の二進数で表示したいなら次のように記述します。

std::cout << "x = " << std::bitset<n>(x) << std::endl;



使用例(128を2進数で表示)

サンプルコード

#include <iostream>
#include <bitset>

int main() {
	int x = 128;
	std::cout << "x = " << std::bitset<8>(x) << std::endl;
}

実行結果

x = 10000000



Tips:表示する桁数の調整

表示する桁数は、変数の型に合わせることがお勧めです。
変数の型のビット数表示できればいいことが多いので、sizeof(x) * 8をnにするといいでしょう。

サンプルコード

#include <iostream>
#include <bitset>

int main() {
	unsigned short x = 128; // unsigned shortは16bit。
	std::cout << "x = " << std::bitset<sizeof(x) * 8>(x) << std::endl;
}

実行結果

x = 0000000010000000





16進数表示(std::hex)

基本的な使い方

16進数はstd::hexで表示できます。

std::cout << std::hex << x;


サンプルコード

int x = 255;
std::cout << "x = " << std::hex << x << std::endl;

結果

x = ff



注意点

int x = 255, y = 15;
std::cout << "x = " << std::hex << x << std::endl;
std::cout << "y = " << y << std::endl;

とすると、次のようにx、yがともに16進数で表示されます。

x = ff
y = f


というのも、std::hexを使うと、それ以降のstd::coutでも16進数で表示されてしまいます。
これを防ぐためには、std::decで10進数表示に戻せばOKです。

int x = 255, y = 15;
std::cout << "x = " << std::hex << x << std::dec << std::endl;
std::cout << "y = " << y << std::endl;

とすれば、次のように表示されます。

x = ff
y = 15



桁数指定で表示

int x = 65535, y = 15;
std::cout << "x = " << std::hex << x << std::dec << std::endl;
std::cout << "y = " << std::hex << y << std::dec << std::endl;

を実行すると、

x = ffff
y = f

と表示されますが、桁がそろっていないと見にくいときも多いです。

そこで、

  • n桁表示するために、iomanipをインクルードしてstd::setw(n)
  • さらに0埋めするためにstd::setfill('0')

とするのがおススメです(参考:setfill - cpprefjp C++日本語リファレンス)。

サンプルコード

#include <iostream>
#include <iomanip>

int main() {
	int x = 65535, y = 15;
	std::cout << "x = " << std::setw(8) << std::setfill('0') << std::hex << x << std::dec << std::endl;
	std::cout << "y = " << std::setw(8) << std::setfill('0') << std::hex << y << std::dec << std::endl;
}

実行結果

x = 0000ffff
y = 0000000f