こんにちは、みやびのです。

今回は、2進数の基本について紹介します。

具体的には以下の2点です。

・コンピュータはなぜ2進数や16進数を使うのか
・コンピュータを理解するための2進数の基本

コンピュータ分野に関わるのであれば2進数や16進数の理解は必須です。
本記事を参考にしつつ簡単なところから始めましょう。

コンピュータはなぜ2進数や16進数を使うのか

Why
コンピュータは2進数や16進数で管理されていることが多いですが、これはなぜでしょうか?
コンピュータはビットと呼ばれるON・OFFのスイッチで全てのデータや処理を管理しています。

そしてこのコンピュータのON・OFFは1・0で表現する2進数と相性が良いです。
ONを1、OFFを0で管理することでコンピュータの全てのデータや処理を2進数で表現できます。

「コンピュータが2進数と相性がいいなら2進数だけで良いのではないか」

と思うかもしれませんが、

2進数だと人間が管理しにくいですし、パッと見でどのくらいの数値かも判断しにくいです。

さてこれはいくつでしょう?
111111110111

正解は4087です。
時間をかければ計算できますが、ちょっとわかりにくいですよね。

これを16進数に変換すれば

ff7で表現できます。ファイナルファンタジー7

「16進数じゃなくて10進数ならより人間は理解しやすいんじゃないか」

と思うかもしれませんが、10進数と2進数の場合、

1001(2) = 9(10)
1010(2) = 10(10)

※()内の数字は進数です

のように変なタイミングで10進数の桁が変わってしまうので相性があまりよくありません。
よって10進数は2進数で管理しているコンピュータとも相性がよくないです。

一方16進数の場合、

0000(2) = 0(16)
0001(2) = 1(16)
0002(2) = 2(16)



1101(2) = d(16)
1110(2) = e(16)
1111(2) = f(16)

※()内の数字は進数です

のように2進数の4桁(0000〜1111)で16進数の一桁(0〜f)を表現できます。桁が上がるタイミングも同じなので10進数と比較すると管理しやすいですね。

以上のように、
・2進数はコンピュータのビットと相性が良い
・16進数は2進数と相性が良い
という理由から2進数や16進数がコンピュータでよく使われます。

コンピュータを理解するための2進数の基本

2進数
2進数の以下の3点について説明します。

・進数の基本
・2進数・10進数・16進数の対応関係
・2進数のマイナスの表現

この3つを覚えてしまえばコンピュータで使う2進数の理解についてはOKです。

進数の基本

進数は、ある数字になる時に桁をあげるという数字の表現方法です。

例えば10進数の場合は、

9の次、10になった時に桁が一つ上がり10となります。

16進数の場合は、f(10進数で15)の次、16になった時に桁が上がり10となります。

同様に2進数の場合は2になった時、3進数の場合は3になった時に桁が上がり10になります。

よって進数が異なると同じ10や100であっても値が異なります。

進数 10 100
2進数 2(10) 4(10)
3進数 3(10) 9(10)
10進数 10(10) 100(10)
16進数 16(10) 256(10)

2進数の場合以下のように桁が上がっていきます。

0001(2) = 1(10)
0010(2) = 2(10)
0011(2) = 3(10)
0100(2) = 4(10)



1000(2) = 8(10)

※()内の数字は進数です

進数の各桁は進数の○乗で表現することができます。

10進数の場合
1桁目:10^0 = 1
2桁目:10^1 = 10
3桁目:10^2 = 100
4桁目:10^3 = 1000

2進数の場合
1桁目:2^0 = 1
2桁目:2^1 = 2
3桁目:2^2 = 4
4桁目:2^3 = 8

2進数はひとまず右の数字を倍にすると覚えておけばOKです。

ポイントは以下の3つ。
・頭に数字を振ろう
・数字が1の桁のルビを全て加算
・0の桁は無視する

ルビ:8 4 2 1
値: 1 0 1 1

最初は数字の頭にルビのように数字を振っておきましょう。

上記の場合、4の桁は0なので無視して計算します。
8+2+1 = 11

2進数はよく使う桁数は16進数と対応する4桁や8桁です。
よって8桁くらいまで覚えておけば良いでしょう。

1111(2) = 15(10) = f(16)

1111 1111 = 255(10) = ff(16)

2進数・10進数・16進数の対応関係

16進数は0x○のように頭に「0x」をつけて表記します。

2進数表記 10進数表記 16進数表記 2進数表記 10進数表記 16進数表記
0000 0 0x0 1010 10 0xa
0001 1 0x1 1011 11 0xb
0010 2 0x2 1100 12 0xc
0011 3 0x3 1101 13 0xd
0100 4 0x4 1110 14 0xe
0101 5 0x5 1111 15 0xf
0110 6 0x6
0111 7 0x7
1000 8 0x8
1001 9 0x9

上記は暗記しておけばOK。
最悪全てを覚えていなくても「16進数の10以降はアルファベットを使う」ということを覚えておけば

「Aが10だからBは11だな」
という感じで連想して思い出すことができます。

また、2進数についても

「1010は、8+2で10だから16進数だとAだな」
のようにその場で計算して、10進数や16進数に変換できればOKです。

2進数のマイナスの表現

2進数のマイナスは先頭の桁で表現します。

先頭の桁が1の場合マイナスとなる訳ですが、1001なら-1という単純な話ではありません。

-1は「1111」です。
-2は「1110」、-3は「1101」

のように一つずつ数字が減っていきます。
桁数が変わると-1の表記上の値が変わります。

下記は全て-1です。
1111
1111 1111
1111 1111 1111

マイナスの絶対値を求める場合はビットを反転(0→1、1→0に変換)して1を加算するという計算方法を行います。

例えば
1111の場合は

0000にして+1を足すので0001となります。

絶対値をマイナスにする場合も反転して+1を加算することで変換可能です。

例えば絶対値「0001」をマイナスにする場合は

1110に1を加算して1111となります。

コンピュータにおいてマイナスは必ず使わければいけない訳ではなく、

・1111を15として扱う
・1111を-1として扱う

のように場面によって使い分けることが可能です。
これによりマイナスを使う必要がない場面においてはより多くの桁が使うことができます。

終わりに

2進数や16進数は基本が分かればそれほど難しくはありません。
計算方法や各進数の対応関係を覚えておけばOKです。

マイナス表記の話が出てくると少し複雑になりますが、計算方法さえ覚えておけばその場で計算できます。

コンピュータ分野に関わる場合は2進数や16進数の理解は必須です。
まずは2進数の計算方法を覚えるなど簡単なところから始めましょう。