C#で2進数と10進数の変換を体験しよう
基本情報の学習では、2進数と10進数の変換が登場します。
たとえば、次の関係です。
0101 = 5
授業では、次のような重みを使って考えます。
8 4 2 1
0 1 0 1
1が立っている場所は、4と1です。
4 + 1 = 5
したがって、2進数の0101は、10進数では5になります。
今回は、この変換をC#のプログラムで体験してみます。
今日の目標
今日の目標は、難しいプログラムを作ることではありません。
次の変換を、C#で実際に動かして確認します。
5 → 0101
0101 → 5
C#の命令をすべて暗記する必要はありません。
Visual Studioのインテリセンスを使いながら、候補を選んで入力していきましょう。
プロジェクトを作成する
Visual Studioを起動します。
最初の画面で、次の順番に操作します。
- 「新しいプロジェクトの作成」をクリックする
- 「コンソール アプリ」を選ぶ
- 「次へ」をクリックする
- プロジェクト名を入力する
- 保存場所を確認する
- 「次へ」をクリックする
- フレームワークを確認する
- 「作成」をクリックする
プロジェクト名は、たとえば次の名前で構いません。
BinaryConverter
プロジェクトが開いたら、最初から書かれているコードを削除して、今回のコードを入力します。
10進数の5を2進数に変換する
最初に、10進数の5を2進数に変換します。
次のコードを入力してください。
int number = 5;
string binary = Convert.ToString(number, 2);
Console.WriteLine(binary);
実行すると、次のように表示されます。
101
10進数の5は、2進数では101です。
コードの意味を確認しよう
最初の行です。
int number = 5;
これは、numberという名前の箱に、整数の5を入れています。
次の行です。
string binary = Convert.ToString(number, 2);
これは、numberに入っている数値を、2進数の文字に変換しています。
最後の2は、2進数に変換することを表しています。
変換された結果は、binaryという名前の箱に入ります。
最後の行です。
Console.WriteLine(binary);
binaryに入っている内容を画面に表示します。
101を0101と表示する
授業では、2進数を4桁にそろえて、0101と書くことがあります。
しかし、先ほどのプログラムでは、先頭の0が省略されて101と表示されました。
4桁で表示したい場合は、次のように変更します。
int number = 5;
string binary = Convert.ToString(number, 2).PadLeft(4, '0');
Console.WriteLine(binary);
実行結果は次のようになります。
0101
PadLeftとは
今回追加した部分は、次の箇所です。
.PadLeft(4, '0')
これは、文字の左側に0を追加して、全体を4桁にそろえるための命令です。
たとえば、変換結果が101の場合、左側に0が1つ追加されます。
101
↓
0101
PadLeftの詳しい仕組みを覚える必要はありません。
今回は、
4桁にそろえるための命令
と考えれば十分です。
数字を変更してみよう
プログラムの次の部分を変更して、結果を確認してみましょう。
int number = 5;
たとえば、5を6に変更します。
int number = 6;
実行結果は次のようになります。
0110
ほかの数字も試してみましょう。
1
3
7
8
10
15
実行する前に、どのような2進数になるか予想してから試してみるのもよいでしょう。
2進数の0101を10進数に変換する
次は、逆の変換を体験します。
先ほど入力したコードを削除して、次のコードを入力してください。
string binaryText = "0101";
int number = Convert.ToInt32(binaryText, 2);
Console.WriteLine(number);
実行すると、次のように表示されます。
5
これで、2進数の0101を10進数の5に変換できました。
コードの意味を確認しよう
最初の行です。
string binaryText = "0101";
binaryTextという名前の箱に、文字として0101を入れています。
0101は数字のように見えますが、今回は文字として扱うため、ダブルクォーテーションで囲んでいます。
"0101"
次の行です。
int number = Convert.ToInt32(binaryText, 2);
これは、binaryTextに入っている2進数を、10進数の整数に変換しています。
最後の2は、元の文字が2進数であることを表しています。
最後の行です。
Console.WriteLine(number);
変換された10進数を画面に表示します。
2進数を変更してみよう
次の部分を変更して、結果を確認してみましょう。
string binaryText = "0101";
たとえば、0110に変更します。
string binaryText = "0110";
実行結果は次のようになります。
6
ほかにも、次の2進数を試してみましょう。
0001
0011
0111
1000
1010
1111
こちらも、実行する前に10進数の値を予想してみましょう。
今回は0と1だけを入力する
2進数に使える数字は、0と1だけです。
そのため、次のような値は2進数ではありません。
0102
1234
abcd
今回は入力内容を確認するプログラムは作りません。
必ず、0と1だけを使った2進数を入力してください。
間違った値を入れてエラーが出た場合は、プログラムが壊れたわけではありません。
入力した値を確認して、もう一度実行すれば大丈夫です。
余裕がある人は入力に挑戦しよう
ここからは発展です。
時間に余裕がある人は、実行中に数字を入力するプログラムも試してみましょう。
10進数を入力し、2進数に変換するコードです。
Console.WriteLine("10進数を入力してください");
string input = Console.ReadLine();
int number = int.Parse(input);
string binary = Convert.ToString(number, 2).PadLeft(8, '0');
Console.WriteLine(binary);
たとえば、5を入力すると、次のように表示されます。
10進数を入力してください
5
00000101
今回は、必ず整数を入力してください。
文字や小数を入力するとエラーになります。
エラーを防ぐ仕組みは、C#を本格的に学習するときに扱います。
エラーが出たときに確認すること
プログラムを入力していると、エラーが出ることがあります。
エラーが出ることは、プログラミングでは珍しいことではありません。
まずは、次の点を確認しましょう。
セミコロンが付いているか
C#では、行の最後にセミコロン;が必要です。
間違った例です。
Console.WriteLine(binary)
正しい例です。
Console.WriteLine(binary);
ダブルクォーテーションが左右にあるか
文字は、ダブルクォーテーション"で囲みます。
間違った例です。
string binaryText = "0101;
正しい例です。
string binaryText = "0101";
丸かっこが閉じているか
(を書いたら、対応する)が必要です。
間違った例です。
Console.WriteLine(binary;
正しい例です。
Console.WriteLine(binary);
記号が全角になっていないか
プログラムで使う記号は、半角で入力します。
次の記号が全角になっていないか確認してください。
( )
" "
;
,
日本語入力がオンになっていると、記号が全角になる場合があります。
今日使った主な命令
今回使った命令を整理します。
Console.WriteLine()
画面に文字や数値を表示します。
Convert.ToString(number, 2)
10進数の数値を、2進数の文字に変換します。
Convert.ToInt32(binaryText, 2)
2進数の文字を、10進数の整数に変換します。
PadLeft(4, '0')
文字の左側に0を追加して、4桁にそろえます。
発展で使った命令です。
Console.ReadLine()
キーボードから入力された文字を受け取ります。
int.Parse()
入力された数字の文字を、整数に変換します。
今回のまとめ
今回は、C#を使って、2進数と10進数の変換を体験しました。
行った変換は、次の2つです。
5 → 0101
0101 → 5
重要なのは、C#の文法をすべて覚えることではありません。
座学で学んだ2進数が、実際のプログラムでも扱えることを確認できれば成功です。
また、プログラムの数字を変更して実行すると、さまざまな変換結果をすぐに確認できます。
教科書で計算した結果と、プログラムで表示された結果が同じになるか、実際に動かしながら確かめてみましょう。






ディスカッション
コメント一覧
まだ、コメントがありません