TERM GUIDE · DIGITAL

2進数

「2進数」とは

普段使っている10進数では、0~9の10種類の数字を使い、桁が一つ上がるごとに値が10倍になります。一方、2進数では0と1だけを使い、桁が一つ上がるごとに値が2倍になります。

例えば、

2026 = 2×10³+0×10²+2×10¹+6×10⁰

です。

2進数とは、0と1の2種類の数字だけを使って数を表す方法です。

例えば、2進数の

1011₂
= 1×2³+0×2²+1×2¹+1×2⁰
= 1×8+0×4+1×2+1×1
11

であり、10進数の11を表しています。

「₂」のような右下の数字は基数を表します。1011₂なら2進数、1011₁₀なら10進数です。

2進数から10進数への変換

2進数から10進数へ変換するときは、2のべき乗の重みを付けて展開し、それを普通に10進数で計算するとよいでしょう。

例えば、1011₂なら、左から8、4、2、1という重みを付け、1になっている桁の重みを足します。

1011₂
= 1×2³+0×2²+1×2¹+1×2⁰
= 8+2+1
11₁₀

10進数から2進数への変換

10進整数を2進数に変換するときは、2で割った商をさらに2で割る操作を、商が0になるまで繰り返す方法を使います。そのときに出た余りを下から上へ読みます。

例えば、10進数26を2進数に変換します。

26÷2=13 余り0
13÷2=6 余り1
6÷2=3 余り0
3÷2=1 余り1
1÷2=0 余り1

余りを下から上へ読むと、

11010₂

となります。したがって、

26₁₀=11010₂

です。

この方法では、2で割ったときの余りは必ず0か1になるため、その余りを順に並べることで2進数を求めることができます。

また、別の方法として、10進整数を2進数に変換するときは、その数を2の累乗の和として考えることもできます。

例えば、10進数26なら、

26=16+8+2
=2⁴+2³+2¹

です。

2⁴、2³、2²、2¹、2⁰の順に、使う桁を1、使わない桁を0にすると、

26=1×2⁴+1×2³+1×2²+1×2¹+0×2⁰
11010₂

となります。

桁数をそろえる

コンピュータでは、値を一定のビット数で表すことが多くあります。

例えば75を普通に2進数で表すと、

1001011₂

ですが、8ビットで表すなら左側を0で埋めて、

01001011₂

とします。左側に付けた0は値そのものには影響しません。

ビットと表せる値の範囲

2進数の1桁を1ビット(bit)といいます。

1ビットでは、

0、1

の2通りを表せます。これはちょうど、1桁の2進数に対応します。

2ビットなら、

00、01、10、11

の4通りです。これは、2桁目が0であるものも含めると、2桁の2進数に対応します。

一般に、nビットでは2ⁿ通りの状態を表せます。

符号なし整数として利用する場合、0も一つの値として使うため、表せる範囲は

0~2ⁿ-1

となります。上位の桁が0のものも含めると、n桁の2進数に対応します。

2進数と16進数

長い2進数は読みにくいため、コンピュータでは16進数を使って短く表すことがあります。

16進数では、0、1、2、…、9、A、B、C、D、E、Fの16種類の数字を使います。

16=2⁴なので、16進数1桁と2進数4ビットがちょうど対応します

16進数1桁と4ビットの対応
16進数2進数
00000
10001
20010
30011
40100
50101
60110
70111
81000
91001
A1010
B1011
C1100
D1101
E1110
F1111

例えば、

6D₁₆
6 → 0110
D → 1101

なので、

6D₁₆=01101101₂

となります。

逆に、

101101100011₂

を右から4ビットずつ区切ると、

1011|0110|0011

となります。それぞれ16進数にすると、B|6|3なので、

B63₁₆

となります。

画像の白黒のマスや1バイトのデータなど、複数のビットをまとめて扱う場合にもこの対応が利用されます。

2進数の加算

2進数でも、10進数と同じように右端から筆算できます。基本となる計算は次のとおりです。

  • 0+0=0

  • 0+1=1

  • 1+0=1

  • 1+1=10

最後の1+1=10₂では、答えの桁が0になり、左の桁へ1が繰り上がります。

例えば、1101₂+101₂を計算する場合、桁をそろえて次のようになります。

  1101
+ 0101
------
 10010

10進数で確認すると、13+5=18であり、18₁₀=10010₂なので一致します。

2倍・4倍とビットシフト

整数の2進数では、左へ1桁ずらすと値は2倍になります。

例えば、

1101₂=13

を左へ1桁ずらすと、

11010₂=26

となります。

さらにもう1桁ずらすと、

110100₂=52

となり、元の4倍になります。

したがって、桁あふれを考えない場合、次のように考えられます。

  • 左へ1ビット → 2倍

  • 左へ2ビット → 4倍

2の補数

2進数で負の整数を表す方法として、2の補数が広く使われます。

補数とは、その数に足し合わせるとちょうど1桁上がる数のことです。

あるビット列の2の補数は、次の手順で求められます。

  1. 0と1をすべて反転する

  2. 1を加える

例えば4ビットの0101₂について考えます。

0101₂
↓ 反転
1010₂
↓ +1
1011₂

この1011₂が、0101₂の2の補数です。

0101₂+1011₂=10000₂であり、5ビット目を無視して4ビットにすると0000₂となります。このことから、4ビットの固定長でみると、0101₂と1011₂は正負がちょうど逆の値として考えることができます。

つまり、0101₂=4+1=5なので、1011₂=-5と考えることができます。

2の補数で表せる範囲

nビットの2の補数表現で表せる整数の範囲は、

−2ⁿ⁻¹ ~ 2ⁿ⁻¹-1

です。

例えば4ビットの2の補数表現では、−8~7を表せます。8ビットなら、−128~127となります。

2の補数を利用した減算

2の補数を使うと、引き算を足し算として計算できます。

例えば、1100₂-0101₂を考えます。

まず0101₂の2の補数を求めます。

0101
↓ 反転
1010
↓ +1
1011

したがって、

  1100
+ 1011
------
1 0111

となります。4ビットを超えた左端の1を捨てると、

0111₂

が残ります。10進数でも、12-5=7なので一致します。

2進小数

2進数でも、小数を表すことができます。

整数部分では小数点から左へ向かって、2⁰、2¹、2²、…と重みが増えます。一方、小数点より右側では、2⁻¹、2⁻²、2⁻³、2⁻⁴、…となります。

つまり、1/2、1/4、1/8、1/16、…です。

例えば、

0.1011₂
= 1×1/2+0×1/4+1×1/8+1×1/16
= 0.5+0.125+0.0625
0.6875

となります。

また、7/32について、

7/32=4/32+2/32+1/32

であるため、

0.00111₂

となります。

2進数で有限小数になる数

10進数では有限小数になる値でも、2進数では無限に続く場合があります。

例えば、0.125=1/8であり、1/8=1/2³なので、2進数では有限桁で表せます。

同様に、0.25=1/4=1/2²なので、

0.01₂

と有限桁で表せます。

一方、0.05=1/20では、分母に2以外の素因数5が含まれています。そのため、2進数では有限桁で表せず、同じ並びが繰り返されます。

この性質は、コンピュータで小数を扱うときに誤差が生じる理由の一つです。

浮動小数点数

コンピュータで非常に大きな値や非常に小さな値、実数を扱うときには、浮動小数点表現が使われます。

一般的な浮動小数点表現は、次のような部分から構成されます。

  • 符号部:数の正負を表す

  • 指数部:値の大きさの桁を調整する

  • 仮数部:有効数字を表す

10進数の科学的記数法で、1.23×10⁵のように有効数字と10の何乗かを分けて表すのと似た考え方です。コンピュータ内部では、これを2進数を使って表します。

ただし、使用できるビット数には限りがあるため、0.1のように2進数で有限桁にならない値を正確に保存できない場合があります。そのため、計算結果にわずかな丸め誤差が生じることがあります。

EXAMPLE

例題

2進数 · EXAMPLEオリジナル

10進数26を、先頭に不要な0を付けない2進数で表した値を次から選べ。

  1. 0

    10100

  2. 1

    11010

  3. 2

    11001

  4. 3

    11100

解答・解説を確認

正解1.11010

解説

10進整数を2進数へ直すには、その数を2の累乗の和で表します。26=16+8+2=2⁴+2³+2¹なので、対応する桁を1にした11010₂となります。

出典
オリジナル

PRACTICE

2進数の問題に挑戦