1.コンピュータ原理
1.1. n進数
1.1.1. コンピュータ内部のデータ
コンピュータは通常、0と1、つまりオフとオンであらゆるデータを表現する。 そのため2進数をベースに、8進数、16進数などが情報工学で用いられる。
10進数 | 2進数 | 8進数 | 16進数 |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
2 | 10 | 2 | 2 |
3 | 11 | 3 | 3 |
4 | 100 | 4 | 4 |
5 | 101 | 5 | 5 |
6 | 110 | 6 | 6 |
7 | 111 | 7 | 7 |
8 | 1000 | 10 | 8 |
9 | 1001 | 11 | 9 |
10 | 1010 | 12 | 10 |
1.1.2. 2進数と10進数
2進数から10進数への変換
1101.011(2)の10進数への変換
2進数 | 1 | 1 | 0 | 1 | . | 0 | 1 | 1 |
---|---|---|---|---|---|---|---|---|
重み | 2^3 | 2^2 | 2^1 | 1 | + | 1/(2^1) | 1/(2^2) | 1/(2^3) |
計算値 | 8 | 4 | 2 | 1 | + | 1/2 | 1/4 | 1/8 |
計算: 8x1+4x1+2x0+1x1+1/2x0+1/4x1+1/8x1 = 13.375
10進数から2進数への変換
13.25(10)の2進数への変換
2)13 2) 6 ... 1 2) 3 ... 0 2) 1 ... 1
上記式より、1101
が抽出。
0.25×2=0.5 0.5×2 =1.0
上記式より、0.10
が抽出。
よって解は1101.01
。
1.1.3. 8進数と16進数
8進数、16進数から10進数への変換
512(8)、1FB(16)の10進数への変換
8進数 | 5 | 1 | 2 |
---|---|---|---|
重み | 8^2 | 8^1 | 8^0 |
計算値 | 64×5 | 8×1 | 1×2 |
計算: 64×5 + 8 + 2 = 330
16進数 | 1 | F | B |
---|---|---|---|
重み | 16^2 | 16^1 | 16^0 |
計算値 | 256×1 | 16×15 | 1×11 |
計算: 256 + 16×15 + 11 = 507
2進数から8進数、16進数に変換
1010.01(2)の8進数と16進数への変換
2進数 | 0 | 0 | 1 | 0 | 1 | 0 | .0 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|
重み | 0 | 0 | 2^0 | 0 | 2^1 | 0 | 0 | 2^1 | 0 |
計算値 | 1 | 2 | .2 |
計算: 12.2(8)
| 2進数 | | 1 | 0 | 1 | 0 | .0 | 1 | 0 | 0 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 重み | 2^3 | 0 | 2^1 | 0 | 0 | 2^2 | 0 | 0 | | 計算値 | 6 | | 2 | | | 4 | | |
計算: 6+2.4 = 8.4 = A.4(16)
8進数、16進数から2進数に変換
12.2(8)、A.4(16)の2進数への変換。
8進数 | 1 | 2 | .2 |
---|---|---|---|
2進数 | 001 | 010 | .010 |
計算: 1010.01(2)
16進数 | A | .4 |
---|---|---|
2進数 | 1010 | .0100 |
計算: 1010.01(2)
1.1.4. ビットとバイト
ビット(bit)はコンピュータで扱うデータの最小単位(データ量)のこと。 ビット列はビットを並べたものを示し、ビット列が長いほど多くの情報を表現できる。 また、8bitは1Byteとして扱われる。
1.2. 負数の表現
1.2.1. 負数の表現方法
コンピュータでは負の数を最上位ビットを符号ビットとして扱うという方法がとられる。 符号用ビットがあるデータは符号ありデータと呼ばれる。
符号ありデータには絶対値表現と補数表現の2通りある。
絶対値表現
絶対値表現は最上位を符号ビットとして、残りのビットで数値の絶対値を表現する方法。
補数表現
補数表現は符号ビットも含めて計算できる負数の表現方法のこと。 補数の1の補数と2の補数がある。
1の補数は絶対値のビットを反転したもの。 2の補数は1の補数に1を足したもの。
1.3. シフト演算
シフト演算はビットを左右にずらすことで積や商を行う方法のこと。 シフト演算には符号考慮する算術シフト、符号を考慮しない論理シフトがある。
1.3.1. 論理シフト
論理シフトは符号を考慮しないシフト演算のこと。
論理左シフト
2進数のビット列を左にずらすと2のn乗倍になる。
0001000 => 0010000
論理右シフト
2進数のビット列を右にずらすと2の-n乗倍になる。
0001000 => 0000100
1.3.2. 算術シフト
算術シフトは符号を考慮するシフト演算のこと。
算術左シフト
符号ビットは固定したまま動かさず、他のビットを左にずらすシフト演算。
算術右シフト
符号ビットは固定したまま動かさず、他のビットを右にずらすシフト演算。 なお右の空いたビットには符号ビットと同じ数字が入る。
1.3.3. シフト演算と加算の演算
シフト演算は2のn乗倍の掛け算と割り算のみ計算できる。 それ以外はシフト演算と足し算を組み合わせて計算を行う。
1.4. 小数表現
1.4.1. 固定小数点と浮動小数点
固定小数点数
固定小数点はビット列のどの位置に小数点があるかを暗黙的に決めて扱う小数表現。
0.00000014
浮動小数点数
浮動小数点は指数表記を用いて小数点以下を表現する手法。
コンピュータはメモリに符号と指数部と仮数部に値を分け値を保持する。 符号には+-の情報を、指数部には累乗の情報を、仮数部には値本体を保存する。
0.14 × 10^-6
1.4.2. 浮動小数点数の正規化
正規化は小数点のすぐ右側に0以外の数字が来るようにするもの。
正規化を行うことで有効な桁数を多くとることができる。 そうすることで誤差分が減り、値の精度を高めることが可能。
1.5. 誤差
誤差は実際の数値とコンピュータが扱う数値に生じる差のこと。
1.5.1. 誤差の種類
丸め誤差
丸め誤差は表現可能な桁数(値域)を超えてしまったため、最小桁より小さい数字が四捨五入や切り上げ、切り捨てなどを行うことで生じる誤差のこと。
打切り誤差
打切り誤差は計算処理を終わるまで待たずに途中で打ち切ることで生じる誤差のこと。
情報落ち
情報落ちは絶対値の大きい数と小さい数の加減算を行ったときに、絶対値の小さい値が計算結果に反映されないことで生じる誤差のこと。
桁落ち
桁落ちは絶対値のほぼ等しい2つの数値の引き算を行った際に、有効桁数が減少するために発生する誤差のこと。
桁あふれ
桁あふれは計算結果の桁数がコンピュータの扱えるビット数を超えることで生じる誤差のこと。
1.6. 論理演算/論理回路
1.6.1. 論理演算
論理回路は入力値に対し論理演算を行い結果を出力する装置のこと。 論理演算はMIL記号と呼ばれる図により表現される。
1.6.2. 基本的な論理回路
OR回路(論理和)
Y = A+B
A | B | Y |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
AND回路(論理積)
Y = A・B
A | B | Y |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
NOT回路(否定)
Y = /A
A | Y |
---|---|
0 | 1 |
1 | 0 |
1.6.3. 基本回路を組み合わせた回路
XOR回路(排他的論理和)
XOR回路はNOT回路とAND回路を接続したもののNOTがない側を並列誘引し、AND出力側をOR回路で組み合わせた回路。
Y = A⊕B
A | B | Y |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
NOR回路(否定論理和)
NOR回路はOR回路とNOT回路を直列に組み合わせた回路。
Y = /(A+B)
A | B | Y |
---|---|---|
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 0 |
NAND回路(否定論理積)
NAND回路はAND回路とNOT回路を直列に組み合わせた回路。
Y = /(A・B)
A | B | Y |
---|---|---|
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
1.7. 半加算器/全加算器
1.7.1. 加算器
加算器には半加算器と全加算器がある。
半加算器
半加算器は2進数の1桁の足し算をする回路のこと。 AND回路とXOR回路を並列誘引接続し組み合わせた回路で作られる。
全加算器
全加算器は半加算器とOR回路を並列接続で組み合わせた回路。 OR回路側の出力を上位桁、2つ目以降の半加算器の出力を下位桁として扱える。
1.8. ビットの操作と反転
1.8.1. ビットの反転
ビットの反転にはXOR回路を用いる。 反転方法は以下の通り。
- 反転したいビット列を用意
- 反転させたい位置のみを1それ以外を0にしたビット列を用意
- 上記2つのビット列でXORをとる
1.8.2. ビットの取り出し
ビットの取り出しにはAND回路を用いる。 取り出し方法は以下の通り。
- ビットを取り出したいビット列を用意
- ビットを取り出したい位置に1それ以外を0にしたビット列を用意
- 上記2つのビット列でANDをとる