10進数26を、先頭に不要な0を付けない2進数で表した値を次から選べ。
- 0
10100
- 1
11010
- 2
11001
- 3
11100
解答・解説を確認
正解1.11010
解説
10進整数を2進数へ直すには、その数を2の累乗の和で表します。26=16+8+2=2⁴+2³+2¹なので、対応する桁を1にした11010₂となります。
- 出典
- オリジナル
TERM GUIDE · DIGITAL
普段使っている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進数で計算するとよいでしょう。
例えば、1011₂なら、左から8、4、2、1という重みを付け、1になっている桁の重みを足します。
1011₂
= 1×2³+0×2²+1×2¹+1×2⁰
= 8+2+1
= 11₁₀
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進数を使って短く表すことがあります。
16進数では、0、1、2、…、9、A、B、C、D、E、Fの16種類の数字を使います。
16=2⁴なので、16進数1桁と2進数4ビットがちょうど対応します。
| 16進数 | 2進数 |
|---|---|
| 0 | 0000 |
| 1 | 0001 |
| 2 | 0010 |
| 3 | 0011 |
| 4 | 0100 |
| 5 | 0101 |
| 6 | 0110 |
| 7 | 0111 |
| 8 | 1000 |
| 9 | 1001 |
| A | 1010 |
| B | 1011 |
| C | 1100 |
| D | 1101 |
| E | 1110 |
| F | 1111 |
例えば、
6D₁₆
6 → 0110
D → 1101
なので、
6D₁₆=01101101₂
となります。
逆に、
101101100011₂
を右から4ビットずつ区切ると、
1011|0110|0011
となります。それぞれ16進数にすると、B|6|3なので、
B63₁₆
となります。
画像の白黒のマスや1バイトのデータなど、複数のビットをまとめて扱う場合にもこの対応が利用されます。
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進数では、左へ1桁ずらすと値は2倍になります。
例えば、
1101₂=13
を左へ1桁ずらすと、
11010₂=26
となります。
さらにもう1桁ずらすと、
110100₂=52
となり、元の4倍になります。
したがって、桁あふれを考えない場合、次のように考えられます。
左へ1ビット → 2倍
左へ2ビット → 4倍
2進数で負の整数を表す方法として、2の補数が広く使われます。
補数とは、その数に足し合わせるとちょうど1桁上がる数のことです。
あるビット列の2の補数は、次の手順で求められます。
0と1をすべて反転する
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と考えることができます。
nビットの2の補数表現で表せる整数の範囲は、
−2ⁿ⁻¹ ~ 2ⁿ⁻¹-1
です。
例えば4ビットの2の補数表現では、−8~7を表せます。8ビットなら、−128~127となります。
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⁻⁴、…となります。
つまり、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₂
となります。
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
10100
11010
11001
11100
正解1.11010
10進整数を2進数へ直すには、その数を2の累乗の和で表します。26=16+8+2=2⁴+2³+2¹なので、対応する桁を1にした11010₂となります。
PRACTICE