はじめMath! Javaでコンピュータ数学

第7回 同じ値でも中身はいろいろ[後編]

この記事を読むのに必要な時間:およそ 3 分

前回は2進数・10進数・16進数の相互変換方法を学びました。今回はコンピュータ内の変数に,数値がどのように格納されているか表示させるプログラムを作りましょう。あわせて筆算で変換を行い,プログラムの実行結果と一致するかを確かめましょう。

問題:int型,long型,float型,double型に格納された数値を16 進数形式で表示してみましょう。

同じ数値が,違う型の変数に格納されると,ビット列にどのような違いが生じるかを実験して確かめよう。

(1) int型,long型の仕様について調査しましょう(実数型については後々学びますので,float型やdouble型の仕様についての調査を省きます)。

(2) 目的の処理をするために必要な命令群について調べましょう。

(3) 整数値(1,-1,85,-85)を入力し,それを16進数表示できるソースコードを作りましょう。確認のために,入力する整数値を筆算で16進数に変換しておきましょう。

課題解決の結果作成されるコードは十人十色でしょう。解説編に掲載するソースコードは私というフィルタを通して作られた一例でしかありません。それぞれが掘り当てた資料や組み上げたコードこそがその人の資産となります。調査・実験に費やす時間を大切にしましょう。

ヒント(1)

キーボードからの文字,数値の入力には,ソースコード冒頭で

import java.io.*;

として,必要なクラスライブラリを指定しておき,以下のコードを必要部分で実行します。キーボードからの入力は文字列変数inputtextに格納されます。

BufferedReader br = new BufferedReader(
  new InputStreamReader(System.in)
);
String inputtext = br.readLine();

なお,この命令を実行するためには,文字入力の際に生じる可能性のある例外処理を記述しなければなりません。例外処理について調べてみてください。

ヒント(2)

Java言語には,プリミティブ※1な数値型に様々なメソッドを追加装備した高機能なラッパークラス※2があります。簡単な変換処理などは既に実装されていますので,ゼロから自分で組もうとせず,JavaAPIのサイトを検索して適切な命令を選択・利用しましょう。

※1
プリミティブ(primitive)。原始的,素朴といった意味。プリミティブな数値型とは,ここではint,long,float,doubleなどを指す。数値を格納するために最低限の機能を持つ型のこと。
※2
ラッパー(wrapper)とは,ラップする(包む)ということで,ある変数やクラスを内包する新しいクラスをつくり,内包するものに対して新しいクラスが機能を付加することを意味する。ラッパークラスとは,そのようにして機能を拡張するために作られたクラスのことです。元となる変数やクラスに手を入れ機能拡張すると,せっかく完成していたものによけいなバグを与えることが考えられる。ラッパークラスにより機能拡張すればこれが避けられる。

著者プロフィール

平田敦(ひらたあつし)

地方都市の公立工業高等学校教諭。趣味はプログラミングと日本の端っこ踏破旅行。2010年のLotYはRuby。結城浩氏のような仕事をしたいと妄想する30代後半♂。

コメント

コメントの記入