LoginSignup
14
8

More than 5 years have passed since last update.

[Java]byte型変数に格納されているビット列をコンソールに表示する

Last updated at Posted at 2018-04-01

byteに格納されているビット列

Javaのbyte型には8ビット(=1バイト)のデータが格納されています。
byteに格納されているビット列(2進数)を16進数、10進数で表現すると以下のようになります。

ビット列(2進数) 16進数 10進数
00000000 00 0
01111111 7F 127
10000000 80 -128
11111111 FF -1

ビット列をコンソールに表示する

2進数表記で表示する方法と、16進数表記で表示する方法について説明します。

  • 2進数表記
1:  byte b = 10;
2:  int i = Byte.toUnsignedInt(b); // 符号なし変換
3:  String str = Integer.toBinaryString(i); // バイナリ文字列を取得
4:  str = String.format("%8s", str).replace(' ', '0'); // 0パディング
5:  System.out.println(str);
  • 16進数表記
1:  byte b = 10;
2:  System.out.print(String.format("%02X", b));

それぞれの出力結果は以下の通りです。

 2進数:00001010
16進数:0A

出力方法を比べてみると、2進数表記は色々と変換が必要となっていることが分かります。

2進数表記の時にどんな変換を行っているのか

2進数表記で具体的にどんな変換を行っているか説明します。
まずは2行目から。

2行目:byte型からint型へ変換する

2:  int i = Byte.toUnsignedInt(b); // 符号なし変換

この時、符号なしの変換を行っている点がポイントです。
理由は、int型の上位24ビットを0にするためです。

byte型(整数) int型<符号なし変換>(整数) int型<符号あり変換>(整数)
00000001(1) 00000000000000000000000000000001(1) 00000000000000000000000000000001(1)
11111111(-1) 00000000000000000000000011111111(255) 11111111111111111111111111111111(-1)

3行目:int型変数のバイナリ文字列(ビット列)を取得する

3:  String str = Integer.toBinaryString(i); // バイナリ文字列を取得

この時、上位の0は無視されます。符号なしの変換を行っていたのはこのためです。

int型(整数) バイナリ文字列
00000000000000000000000000000001(1) 1
00000000000000000000000011111111(255) 11111111

4行目:取得した文字列を0パディングする

4:  str = String.format("%8s", str).replace(' ', '0'); // 0パディング

具体的には、書式付き文字列を使って空白でパディングした後に、空白を0replaceしてます。

まとめ

プログラムの動作確認をしている時にふとbyte[]の中身を確認したくなり、方法を探したところ意外と苦戦してしまったため、実現方法をメモとして記事に残させていただきました。
小ネタですが誰かの役に立てれば幸いです。

14
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
8