2020.11.02

Javaプログラミング

2進数を整数に変換

文字列(String型)で格納された2進数の値を、int型整数に変換する方法を説明しています。

	"00010001" →  17
	"11100111" → 231

ここで説明するのは、上記のようなメソッドの作り方です。

具体的には、String型をbyte配列に変換し、そのbyte配列に格納されている'0'と'1'の値から整数の値を求めるものです。

例えば、文字列が"11001"である場合、これをbyte型配列codeに変換すると。

	code[ 0 ] = 49; // '1'のASCIIコード
	code[ 1 ] = 49; // '1'のASCIIコード
	code[ 2 ] = 48; // '0'のASCIIコード
	code[ 3 ] = 48; // '0'のASCIIコード
	code[ 4 ] = 49; // '1'のASCIIコード

となります。各文字をASCIIコードに変換された値を格納します。

このbyte配列添え字の0から4の順に以下のような計算を行います。

	int result = 0;
	result =  (int)code[ 0 ] - 48;           // resultの値 : 1
	result = ( result * 2 ) +  (int)code[ 1 ] - 48;  // resultの値 : 3  ( 1 * 2 + 1 )
	result = ( result * 2 ) +  (int)code[ 2 ] - 48;  // resultの値 : 6  ( 3 * 2 + 0 )
	result = ( result * 2 ) +  (int)code[ 3 ] - 48;  // resultの値 : 12  ( 6 * 2 + 0 )
	result = ( result * 2 ) +  (int)code[ 4 ] - 48;  // resultの値 : 25  ( 12 * 2 + 1 )

配列添え字の小さいほうから順番に、2倍しながら足していくことで2進数の桁を1つずつ上げます。

'0'のASCIIコードが48なので、配列codeの各値から48を引いて計算します。

また、以下のように48の代わりに'0'を直接ソースコードに書いて計算させることもできます。

	int result = 0;
	result =  (int)code[ 0 ] - '0';           // resultの値 : 1
	result = ( result * 2 ) +  (int)code[ 1 ] - '0';  // resultの値 : 3  ( 1 * 2 + 1 )
	result = ( result * 2 ) +  (int)code[ 2 ] - '0';  // resultの値 : 6  ( 3 * 2 + 0 )
	result = ( result * 2 ) +  (int)code[ 3 ] - '0';  // resultの値 : 12  ( 6 * 2 + 0 )
	result = ( result * 2 ) +  (int)code[ 4 ] - '0';  // resultの値 : 25  ( 12 * 2 + 1 )

Javaソースコード

以下が、上記を使ったJavaソースコードの例です。

static int parseInt2( String str )が作成したメソッドで、数字の'0'と'1'以外の文字がある場合にエラーとしてint型で持てる最小値-2147483648を戻すようにしています。

StringtoValue2.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
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
public class StringtoValue2 {
	// 2進数の文字列を10進数に変換
	// エラーの場合、int型の最小値"Integer.MIN_VALUE"を戻す
	static int parseInt2( String str )
	{
		// 文字数を取得
		int len = str.length();

		// 文字数が1未満の場合、intの最小値を戻す
		if ( 1 > len )
			return Integer.MIN_VALUE;

		// 文字列をbyte配列に変換
		byte[] code = str.getBytes();

		// 結果格納用の変数
		int result = 0;

		// 変換するループ
		for ( int i = 0; i < len; i++ ) {
			switch ( code[ i ] ) {
				case '0':
				case '1':
					// 数字の処理の処理
					// 桁を1桁増やす
					result *= 2;

					// code[i]の値を整数にキャストして足す
					result +=  (int)(  (byte)code[ i ] - '0' );

					break;

				default:
					// '0'と'1'以外の文字の場合
					return Integer.MIN_VALUE;
			}
		}

		// 最後に結果を戻す
		return result;
	}


	// メイン
	public static void main( String[] args ) {
		// 結果を格納する変数
		int result;

		// 変換結果出力
		result = parseInt2( "000" );
		System.out.println( result );

		result = parseInt2( "001" );
		System.out.println( result );

		result = parseInt2( "010" );
		System.out.println( result );

		result = parseInt2( "1110" );
		System.out.println( result );

		result = parseInt2( "10000101" );
		System.out.println( result );
	}
}

実行結果

実行

C:\talavax\javasample>java StringtoValue2

出力結果

0
1
2
14
133

以上です。

関連コンテンツ

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

2022.09.10

大文字/小文字のアルファベットを出力する方法を詳しく解説しています。

2024.02.01

ひらがなの50音表を作ってみませんか?Javaのソースコードを使って詳しく説明しています。

2021.07.29

プログラミング、ITに関する用語をまとめています。

2022.10.17

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

2023.03.20

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

2020.03.20

式の値によって処理を分岐する方法を詳しく解説しています。

2016.08.04

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

2020.03.23

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

2022.12.13

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

2020.03.23

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

2020.03.23

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

2020.03.23

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

2016.12.16

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

2016.02.16

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

2020.03.23

メソッドの定義方法を詳しく解説しています。Javaのサンプルソースコードを使った説明もあります。

2020.03.23

同じ型の変数(データ)を複数個まとめて管理するデータの持ちかたがあります。これが配列です。くわしくは、記事をご覧ください。

2016.01.14

コンピュータで扱う情報の量を表す単位って何?メモリ、HDD(ハードディスク)、SSDなどデータを格納する機器の仕様に書いている記号GB,TBとは?

2020.10.12

アスキーコードは、ASCIIコーコンピュータで扱う"文字"と"文字に割り当てられた番号"を対応させた表の1つです。

2020.11.01

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

2022.08.03

2つの値のうち、小さい方の値と、大きい方の値を取得する方法。

2020.03.23

広告