2016/02/26 公開
・10進数→2進数変換
入力した10進数を2進数で表示するプログラムを紹介します。10進数の値を2で割っていき、余りが0の場合は"0"、余りが1の場合は"1"を文字列の先頭に足していくことで2進数を表現しています。
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で繰り上がる数値表現 |
ビット演算子 | ビット演算子について解説 |
ビットシフト | ビットのずらしかた |
コマンドライン引数 | 外部からの値を受け取る方法について解説 |
2進数を整数に変換 | "11001"→25 |
■新着情報
2022.07.07 | 外部プログラムの実行 | exeファイル実行 |
2022.07.06 | 完全数 | 6=1+2+3 |
■広告