最終更新
リンドくん
先生、プログラミング勉強してたら「2進数」とか「16進数」って言葉をよく見かけるんですけど、これって何なんですか?
たなべ
コンピュータの世界では、普段僕たちが使っている10進数とは違う数の表し方をしているんだ。
今日は、コンピュータがどうやって数を扱っているのかを一緒に学んでいこう。
プログラミングを学び始めると、必ず出会うのが「2進数」という概念です。
「0b1010」や「0xFF」といった見慣れない数の表記を見て、戸惑った経験はありませんか?
本記事では、プログラミングの基礎となる2進数の仕組みと、異なる数の表し方(基数)を変換する方法について、初心者の方でも理解できるよう丁寧に解説していきます。
コンピュータがなぜ2進数を使うのか、10進数から2進数への変換はどうやるのか、そして実際のプログラミングでどう活用されているのか。
これらの疑問に、ゲームの例えも交えながら、わかりやすくお答えしていきましょう。
HackATAは、IT技術を習得する人のために広く開かれたオンラインコミュニティです。 現在、無料コミュニティとして開放していますので、ご気軽に参加してください。
✓ 再立ち上げ
✓ コミュニティの方向性について意見募集中
リンドくん
普段使っている数字も「10進数」って呼ばれるんですか?
たなべ
その通り!僕たちが普段使っているのは10種類の数字(0〜9)を使う10進数なんだ。
でも実は、数の表し方は10進数だけじゃないんだよ。
進数とは、数を表現するときに使う「基数(位が変わるときに基準となる数)」のことです。
もっと簡単に言うと、何種類の数字を使って数を表すかを決める仕組みです。
私たちが日常的に使っている数は10進数(Decimal)と呼ばれます。
これは0から9までの10種類の数字を使って、すべての数を表現する方法です。
たとえば「123」という数字は、10進数では以下のように成り立っています。
各桁が「10のn乗」で重みづけされているため、10進数と呼ばれるのです。
人間が10進数を使っている理由は、おそらく指が10本あるからだと言われています。
古代から人々は指を使って数を数えてきたため、自然と10を基準とした数え方が定着したのです。
しかし、コンピュータには「指」がありません。
コンピュータが理解できるのは、「電気が流れている」か「流れていないか」の2つの状態だけです。
そのため、コンピュータの世界では2進数が使われるようになったのです。
リンドくん
なんでコンピュータは2進数を使うんですか?10進数じゃダメなんですか?
たなべ
いい質問だね!コンピュータの中身を考えると、その理由がよくわかるんだ。
コンピュータは電気のON/OFFで動いているからなんだよ。
コンピュータの内部では、すべての情報が電気信号で表現されています。
電気が流れている状態を「1」、流れていない状態を「0」として扱います。
この0と1の2種類だけを使って数を表す方法が2進数なのです。
たとえば、スイッチを想像してみてください。
このスイッチを複数個並べることで、様々な数を表現できます。
2進数には以下のような利点があります。
ゲームで例えるなら、「攻撃が当たった/外れた」という2つの状態だけで判定するようなものです。
「50%当たった」という中途半端な状態がないため、判定が明確でわかりやすいですよね。
リンドくん
2進数って、実際にはどうやって数を表すんですか?
たなべ
10進数と同じように、桁が上がるごとに重みが変わるんだけど、10進数が10倍ずつ増えるのに対して、2進数は2倍ずつ増えるんだよ。
2進数では、各桁が「2のn乗」の重みを持ちます。
たとえば、2進数の「1101」を10進数に変換してみましょう。
このように、右端から左に向かって、1の位、2の位、4の位、8の位...と増えていくのが2進数の特徴です。
2進数で数を数えてみましょう。
10進数では9の次に桁が上がりますが、2進数では1の次に桁が上がるという違いがあります。
2進数の1桁のことをビット(bit)と呼びます。
そして、8ビットをまとめたものをバイト(byte)と呼びます。
1バイトで表現できる数の範囲は、0から255まで(合計256通り)です。
これは、ゲームでキャラクターのレベルやHP、アイテムの個数などを管理するときに、よく使われるサイズなんです。
リンドくん
10進数の数を2進数に変換するには、どうすればいいんですか?
たなべ
いくつか方法があるんだけど、2で割り続ける方法が一番わかりやすいかな。
実際にやってみよう!
10進数を2進数に変換する最も一般的な方法は、2で割り続けて余りを記録する方法です。
例として、10進数の「13」を2進数に変換してみましょう。
このように、商が0になるまで2で割り続け、余りを逆順に並べることで、2進数に変換できます。
もう少し大きな数でも試してみましょう。10進数の「42」を2進数に変換します。
したがって、10進数の「42」は、2進数では「101010」となります。
正しく変換できたか、確認してみましょう。
しっかり元の数に戻りましたね!
リンドくん
逆に、2進数を10進数に戻すのはどうすればいいんですか?
たなべ
これは比較的簡単だよ。各桁の重みを掛けて足し算するだけなんだ。
2進数から10進数への変換は、各桁の値に重みを掛けて合計する方法が基本です。
例として、2進数の「11010」を10進数に変換してみましょう。
変換をスムーズに行うために、以下の2の累乗を覚えておくと便利です。
これらの数字は、プログラミングやゲーム開発でも頻繁に登場します。
たとえば、ゲームで最大HPが255までという制限があるのは、1バイト(8ビット)で表現できる最大値だからなんです。
リンドくん
先生、「16進数」っていうのも見かけるんですけど、これは何なんですか?
たなべ
16進数は、16種類の記号を使って数を表す方法なんだ。
プログラミングでは、2進数をもっと読みやすくするために使われることが多いんだよ。
16進数(Hexadecimal)は、0から9までの数字に加えて、AからFまでのアルファベットを使って数を表現します。
16進数が便利な理由は、2進数4桁がちょうど16進数1桁に対応するからです。
たとえば、2進数の「11111111」は、16進数では「FF」と表記できます。
これにより、長い2進数をコンパクトに表現できるのです。
プログラミングでは、16進数は以下のような場面で使われます。
カラーコード
メモリアドレス
ビット演算やフラグ管理
プログラミング言語では、16進数を表すときに「0x」という接頭辞をつけることが一般的です。
リンドくん
実際のプログラミングでは、どんな場面で2進数や16進数を使うんですか?
たなべ
意外といろんな場面で使われているんだよ。
特にビット演算や権限管理、色の表現なんかでよく使うんだ。
ビット演算は、2進数の各ビットを直接操作する処理です。
ゲーム開発では、キャラクターの状態管理などによく使われます。
このように、1つの変数で複数の状態を同時に管理できるのがビット演算の強みです。
Webやゲーム開発では、色を16進数で表現することが一般的です。
ファイルやシステムの権限管理でも、ビット演算が活用されています。
リンドくん
基数変換って、慣れないと時間がかかりそうですね...
たなべ
最初はそうだけど、よく使う数字のパターンを覚えるとグッと楽になるんだ。
あとは、プログラミング言語の機能を使うのも手だよ。
以下のような変換は頻繁に使うので、覚えておくと便利です。
実際のプログラミングでは、言語の組み込み機能を使って変換できます。
多くのOSには、プログラマ向け電卓が用意されています。
これらのツールを使えば、瞬時に基数変換ができます。
リンドくん
2進数や16進数の仕組みがだいぶわかってきました!
コンピュータの世界って、思ったより身近なんですね。
たなべ
そう思ってもらえると嬉しいな!
最初は難しく感じるかもしれないけど、コンピュータの基本的な仕組みを理解することは、プログラミングスキル向上にとても役立つんだよ。
この記事では、プログラミングの基礎となる2進数と基数変換について解説してきました。
ここで重要なポイントをおさらいしましょう。
プログラミングを学ぶ上で、コンピュータがどのように動いているのかを理解することは非常に重要です。
2進数や基数変換は、その第一歩となる基礎知識なのです。
最初は複雑に感じるかもしれませんが、実際にプログラムを書きながら使っていくうちに、自然と身についていきます。
ぜひ今回学んだ知識を活かして、より深いプログラミングの世界に踏み出してみてください。