2016.02.26

10進数→2進数変換

はじめに

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

Javaソースコード

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

Binary.java

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
import java.io.*;

public class Binary {
	public static void main( String[] args ) {
		int    num;	// 変換元の10進数
		String str;	// キーボードから入力する文字列

		// 10進数の入力
		BufferedReader input
			 = new BufferedReader( new InputStreamReader( System.in ) );
		try {
			System.out.print( "10進数を入力して下さい : ");
	                str = input.readLine();
			num = Integer.parseInt( str );
		}
		catch ( IOException e ) {
			// タイプ時のエラー
			System.out.println( e );
			return;
		}
		catch ( NumberFormatException e ) {
			// String→int変換エラー
			System.out.println( "Error : 数字を入力してください!" );
			return;
		}

		// 10進数→2進数変換処理
		string bin = "";	// 結果の2進数を格納する文字列
		// 繰り返し処理
		do {
			if ( 0 == ( num % 2 ) )
				bin = "0" + bin;
			else
				bin = "1" + bin;
			num = num / 2;
		} while( 0 < num );

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

コンパイル ソースコードが「ANSI」の場合

C:\talavax\javasample>javac -encoding sjis Binary.java

コンパイル ソースコードが「UTF-8」の場合

C:\talavax\javasample>javac Binary.java

実行

C:\talavax\javasample>java Binary

出力結果

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

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

Javaソースコードの解説

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

001
import java.io.*;

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

003
public class Binary {

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

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

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

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

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

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

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

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

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

029
030
031
032
033
034
035
036
		// 繰り返し処理
		do {
			if ( 0 == ( num % 2 ) )
				bin = "0" + bin;
			else
				bin = "1" + bin;
			num = num / 2;
		} 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
039
		// 2進数を表示
		System.out.println( " 2進数:" + bin );

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

以上です。

関連コンテンツ

「0」と「1」の2つの数字で表される2進数(バイナリ)。一般に使われている10進数に変換するには。

2016.02.16

数値を2進数で表したときの各桁の「0」と「1」に対して演算を行えます。4種類の演算、AND(論理積)、OR(論理和)、XOR(排他的論理和)、NOT(否定)を詳しく説明しています。

2016.03.26

2進数の桁を左右のどちらかに指定回数だけずらすビットシフトについて詳しく解説しています。

2016.04.03

文字列の2進数を、int型の整数に変換する方法を詳しく解説しています。

2020.11.02

割り算で割り切れずに残った端数を剰余(余り)といいます。この剰余の計算をJavaのソースコードを使って解説しています。

2020.03.23

処理を繰り返すために使用するdo~while文について解説しています。

2016.02.26

Javaを使った簡単な応用プログラム(生年月日から年齢を計算プログラムなど)を紹介しています。

2022.07.07

Javaの学習に役立つソースコードを多数紹介しています。是非、ご覧ください。

2022.09.10

変数やクラスに格納されている値をコンソール出力する方法は?

2020.03.23

メソッドを抜けるときに使用するreturn文について説明しています。

2020.03.20

条件式を判断して処理を分岐する方法を詳しく説明しています。

2023.03.20

処理を繰り返すために使用するwhile文について解説しています。

2016.01.26

繰り返し処理の作り方を解説しています。

2016.03.02

プログラムの最初に実行されるメソッドは?

2022.12.13

プログラミングで使う変数って何?

2020.03.23

Javaのプログラムを書いてみませんか?プログラムの書き方をくわしく説明しています。

2020.03.23

「Javaソースコード」から実行可能な「オブジェクトコード」に変換する方法をくわしく説明しています。

2020.03.23

StringクラスとStringBuilderクラスを利用したプログラミングの仕方を紹介しています。

2016.12.16

プログラミング言語とは?種類や特徴について説明しています。

2022.08.03

Javaプログラムの構成について解説しています。詳しくは、こちらをご覧ください。

2020.03.23

割り算で「割り切れる」、「割り切れない」ってどういうこと?

for文で変数名iがよく使われる理由について説明しています。興味のある方は是非。

2022.08.29

自然数と整数って何が違う?

2020.03.23

広告