どうも!リョクちゃです。
前回の記事では10進数を2進数に変換する関数について紹介をしました。
今回は、2進数から10進数に変換する関数を作成していく中で、
2進数から10進数への変換方法を紹介していきます。
ざっくりとイメージをつかんでいただき、関数を作成することで
実際に2進数から10進数に変換されることを確認していきます。
その中で理解を深めてもらえたらなと思います。
ちなみに前回はこちら、
目次
2進数から10進数へ変換するには
2進数を10進数へ変換するには、下記イメージを描いたので、
参考にしてください。
いったんイメージをつかみ、後で説明をしていきます。
まず、2進数を10進数へ変換するには、各桁を基数^nの形に置き換えます。
nについては、0から連続する数字を当てはめます。
各桁の状態×基数^nの結果を足し合わせていった答えが、10進数となります。
この変換過程を元に関数を作成していきます。
ちなみに8進数にしたい場合は、基数(eの部分)を8に置き換えて計算をします。
準備編:フォームの作成
今回は以下のようなフォームを作成します。
前回の記事で作成したフォームがある方は、そのフォームに変更を加えても問題ありません。
実行環境
筆者の実行環境を以下に示します。
- VisualStudio2019
- Windows 10 64bit
- .Net Framework 4.5.1
になります。
※ Windows7 8 8.1でも動作はできますが、
画面デザインの表示が変わるかもしれません。
アプリケーションの目的
変換前ボックスに変換したい2進数を入力し、
ボタンを押すことで変換先ボックスに変換された値が正しく表示することを目的とします。
今回の場合、2進数を10進数に変換した値が正しく表示されればゴールとなります。
プログラム編
それでは実際にプログラムを組んでいきます。
最初に、フォームデザイン上でボタンコントロールをダブルクリックして、
コードビューに移ります。
コードビューに移ったら、実際に関数を作成していきます。
2進数から10進数へ変換する関数を作成
2進数から10進数にするには、繰り返し処理であるFor Each~文を使います。
これは、入力された2進数を文字列型で受け取り、For Each文のin句の後に記述することで、
文字列を1つ1つ文字にたいして処理ができるようになるからです。
コードで書くと以下のような感じになります。
1 2 3 4 5 6 7 8 9 10 11 12 |
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' TextBox1.Textには"1111"を入力 For Each strOne As String In Me.TextBox1.Text Console.WriteLine(strOne) ' 各桁ごとに出力される Next strOne End Sub ' 出力 ' 1 ' 1 ' 1 ' 1 |
For Each文を使うことで各桁ごとに処理がされるようになります。
各桁ごとの処理に移る前に、指数部分(n)の準備をします。
これについては新たに変数を整数型で用意し、入力した文字列の長さを代入します。
1 |
Dim n As Integer = Me.TextBox1.Text.Length - 1 |
作成した変数nを基数^nのnとして使用していきます。
それでは、各桁ごとに計算する処理部分を書いていきましょう。
各桁ごとの計算については、以下の式で行います。
例えば、2進数が1111として与えられた場合、最初の処理は
1 × 2 ^ 3
になります。
ここでFor Each~では、左からではなく右から各桁について処理していくため、
変数nにはあらかじめ文字列の長さを与えています。
これを各桁に処理が移るにつれて最後に-1をしてあげる処理を書くのを忘れずにします。
こうして作成した関数が、以下になります。
1 2 3 4 5 6 7 8 9 10 |
' 2進数を10進数に変換 Private Function TwoToTen(ByVal value As String) As String Dim n As Integer = value.Length - 1 ' 指数部分として宣言 Dim rec As Integer ' 計算結果格納用変数 For Each bit As String In value rec += CInt(bit) * 2 ^ n n -= 1 ' 右から桁処理をしているので指数部分を-1する Next bit Return rec ' 最終計算結果を戻り値として返す End Function |
これをボタンが押されたら実行できるようにしてあげます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Public Class TestTenConvertToN Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Me.TextBox2.Text = TwoToTen(Me.TextBox1.Text) End Sub ' 2進数を10進数に変換 Private Function TwoToTen(ByVal value As String) As String Dim n As Integer = value.Length - 1 ' 指数部分として宣言 Dim rec As Integer ' 計算結果格納用変数 For Each bit As String In value rec += CInt(bit) * 2 ^ n n -= 1 ' 右から桁処理をしているので指数部分を-1する Next bit Return rec ' 最終計算結果を戻り値として返す End Function End Class |
実行編
それでは作成したプログラムを実行していきます。
変換したい2進数を入力しています。
ボタンを押して変換した結果を出力しています。
他の例もいくつか挙げておきます。
2進数101を入力し、変換した結果になります。
2進数1100001001を入力し、変換した結果になります。
まとめ
2進数から10進数へ変換する関数を作成し、
実際にどのように変換されるのかについて触れていきました。
2進数の部分を例えば、8進数に置き換えて計算をすることで、
8進数を10進数に変換することもできるので応用として
作成した関数に工夫を加えてみるのもありです。
最後までご覧いただきありがとうございます。
・こちらの書籍を参考にVB.Net勉強しています。