2016.02.26
10進数→2進数変換
はじめに
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; }
027 028
// 10進数→2進数変換処理 string bin = ""; // 結果の2進数を格納する文字列
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=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進数に変換した結果を表示します。
以上です。
関連コンテンツ
数値を2進数で表したときの各桁の「0」と「1」に対して演算を行えます。4種類の演算、AND(論理積)、OR(論理和)、XOR(排他的論理和)、NOT(否定)を詳しく説明しています。
割り算で「割り切れる」、「割り切れない」ってどういうこと?