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