ゆるゆるプログラミング

・10進数→2進数変換

入力した10進数を2進数で表示するプログラムを紹介します。10進数の値を2で割っていき、余りが0の場合は"0"、余りが1の場合は"1"を文字列の先頭に足していくことで2進数を表現しています。

以下が、そのJavaソースコードです。

Binary.java
001:    import java.io.*;
002:    
003:    public class Binary {
004:    	public static void main( String[] args ) {
005:    		int    num;	// 変換元の10進数
006:    		String str;	// キーボードから入力する文字列
007:    
008:    		// 10進数の入力
009:    		BufferedReader input
010:    			 = new BufferedReader( new InputStreamReader( System.in ) );
011:    		try {
012:    			System.out.print( "10進数を入力して下さい : ");
013:    	                str = input.readLine();
014:    			num = Integer.parseInt( str );
015:    		}
016:    		catch ( IOException e ) {
017:    			// タイプ時のエラー
018:    			System.out.println( e );
019:    			return;
020:    		}
021:    		catch ( NumberFormatException e ) {
022:    			// String→int変換エラー
023:    			System.out.println( "Error : 数字を入力してください!" );
024:    			return;
025:    		}
026:    
027:    		// 10進数→2進数変換処理
028:    		string bin = "";	// 結果の2進数を格納する文字列
029:    		// 繰り返し処理
030:    		do {
031:    			if ( 0 == ( num % 2 ) )
032:    				bin = "0" + bin;
033:    			else
034:    				bin = "1" + bin;
035:    			num = num / 2;
036:    		} while( 0 < num );
037:    
038:    		// 2進数を表示
039:    		System.out.println( " 2進数:" + bin );
040:    	}
041:    }

Binaryを実行

C:\talavax\javasample>java Binary

実行結果

10進数を入力してください : 43
 2進数: 101011

43を入力すると101011と表示されました。

ここからは、このソースコードを上から順番に解説していきます。

001:    import java.io.*;

Javaのクラスライブラリの中から「java.io」というパッケージにあるクラスを、このプログラム内で使うために記述します。 この記述により、BufferedReaderクラスが利用できるようになります。

003:    public class Binary {

クラス名を、Binaryとしています。

004:    	public static void main( String[] args ) {

このmainメソッドからプログラムを実行します。

005:    		int    num;	// 変換元の10進数
006:    		String str;	// キーボードから入力する文字列

このプログラムで使う変数を宣言しています。

008:    		// 10進数の入力
009:    		BufferedReader input
010:    			 = new BufferedReader( new InputStreamReader( System.in ) );
011:    		try {
012:    			System.out.print( "10進数を入力して下さい : ");
013:    	                str = input.readLine();
014:    			num = Integer.parseInt( str );
015:    		}
016:    		catch ( IOException e ) {
017:    			// タイプ時のエラー
018:    			System.out.println( e );
019:    			return;
020:    		}
021:    		catch ( NumberFormatException e ) {
022:    			// String→int変換エラー
023:    			System.out.println( "Error : 数字を入力してください!" );
024:    			return;
025:    		}

キーボードから10進数の値が入力されるのを待ち、不正な値が入力されたときにエラーメッセージを表示した後、returnによってmainメソッドを抜けています。

027:    		// 10進数→2進数変換処理
028:    		string bin = "";	// 結果の2進数を格納する文字列

表示用の2進数を格納する変数binを定義し、空文字を代入しています。

029:    		// 繰り返し処理
030:    		do {
031:    			if ( 0 == ( num % 2 ) )
032:    				bin = "0" + bin;
033:    			else
034:    				bin = "1" + bin;
035:    			num = num / 2;
036:    		} while( 0 < num );

実際に10進数から2進数文字列を作っている箇所です。10進数の値が格納されている変数numが2で割り切れるかを判定し、割り切れれば”1”を、割り切れなければ”0”を変数binの先頭に足します。numを2で割った値で、この処理を繰り返し行います。numが0になると終了です。

ここで具体的な数字を使って確認してみます。このプログラムでnum=5の場合を例に説明します。

①num=5

num=5は、2で割り切れないので"1"を文字列binの先頭に足します。値を足す前のbinの値は空文字なのでbin=”1”となります。次にnumを2で割ります。結果はnum=2になります。数学的にはnum=2.5ですが、intは整数型なので小数部は切り捨てられてしまいます。→ ②へ

②num=2

num=2は、2で割り切れるので"0"を文字列binの先頭に足します。値を足す前のbinの値は”1”なのでbin=”01”となります。次にnumを2で割ります。結果はnum=1になります。→ ③へ

③num=1

num=1は、2で割り切れないので"1"を文字列binの先頭に足します。値を足す前のbinの値は”01”なのでbin=”101”となります。次にnumを2で割ります。結果はnum=0になります。→ ④へ

④num=0

num=0となり処理を終了します。結果は=”101”となります。

ここで普段使っている10進数でこの方法について考えてみます。10進数で703を、上記の方法で文字列にする例をで説明します。2進数の場合は、2で割っていきましたが、10進数の場合は10で割っていきます。

①num=703

num=703を10で割った余りを求めます。余りは3です。その余りを文字列binの先頭に足します。値を足す前のbinの値は空文字なのでbin=”3”となります。次にnumを10で割ります。結果はnum=70になります。intは整数型なので小数部は切り捨てられてしまいます。→ ②へ

②num=70

num=70を10で割った余りを求めます。余りは0です。その余りを文字列binの先頭に足します。値を足す前のbinの値は”3”なのでbin=”03”となります。次にnumを10で割ります。結果はnum=7になります。→ ③へ

③num=7

num=7を10で割った余りを求めます。余りは7です。その余りを文字列binの先頭に足します。値を足す前のbinの値は”03”なのでbin=”703”となります。次にnumを10で割ります。結果はnum=0になります。→ ④へ

④num=0

num=0となり処理を終了します。結果は=”703”となります。

このように10進数での処理の場合、10で割った余りを足していきます。2進数での処理の場合も同様に、2で割った余りの数を足しても同じ結果が得られます。ここでは、余りの数を文字列に変換する処理を省略するために、2で割り切れれば”0”、そうでなければ”1”を足す方法を紹介しています。

038:    		// 2進数を表示
039:    		System.out.println( " 2進数:" + bin );

2進数に変換した結果を表示します。

■関連コンテンツ

2進数 2進数について
do~while文 繰り返し処理に使用するdo~while文について解説

■新着情報

2017.11.17 N値化 カラー画像をN値化する方法について解説
2017.11.16 最も近い値の取得 指定値に最も近い配列の値を取得する方法を解説
2017.10.02 アルファ値(透過) アルファ値(透過)について

■広告

法人向けのETC専用カード

~約8,000名の受講生と80社以上の導入実績~ 企業向けプログラミング研修ならCodeCamp

日本最大級ショッピングサイト!お買い物なら楽天市場

Topへ