Javaで10進数を16進数に変換したあと、数値として扱う際に戸惑った + 不思議に思ったことがありました。
また、今回のN進法なんて普段ゴリゴリ書いたりすることは無いので忘れやすいと思い、備忘録として記載します。
目次
JAVAでは変数は基本的に10進数で表示される
突然ですが私はここで不思議に思いました。
何も考えず、
int num = 0x80;
System.out.println(num);
と書いて実行した。あれ?なぜパッと16進数が出力されてこないんだ・・・。
思わず学生時に購入したJavaの教材を確認したところ、こう記載があった。
「Javaでは10進数での表示が基本になっていますので、16進数リテラルや2進数リテラルなどは、それを10進数に変換した値が表示されます。」
と。あぁ、そういう言えばそんなのあったなぁ、と思い出す。でも、
え?なんで10進数が基本なの?10進数が基準になっている意味がわからない・・・。
気になったので調べてみると、
人間が10進数を使うようになったのは、『人間の指が両手で10本あるから』(諸説あります。)
とありました。
プログラムを書いているんだから、16進数は16進数でそのまま表示したらいいのになぁ。とも思いますが、
Javaは人間が見やすいように10進数で表示してくれているのね。と解釈するしか無いですね。
(もっと正確な答えを知っている方が居れば教えてください・・・。)
10進数を16進数に変換する方法
10進数を16進数にするのはとても簡単。
Integer.toHexString(int i);
1行だけで済むのでいいですね。ただ戻りの型はStringです。
他にもメソッド一覧を見ると使えそうなものはたくさんありますね。
実際のコード
int num = 84;
System.out.println("10進数を出力 = " + num);
System.out.println("16進数を出力 = " + Integer.toHexString(num) + "←この時String型");
System.out.println("16進数を出力 = " + Integer.parseInt(Integer.toHexString(num),10) + "←この時に16進数のint"); // アルファベットが無ければOK
16進数にした時、文字列になってしまうので時には数値に変換したりしますので一応コードも記載します。
ただ、アルファベットを含む16進数が来てしまうとエラーになるので、別途処理を考えないといけない。
ここは今回は見なかった事にしよう・・・。