LoginSignup
0
0

基礎理論

Last updated at Posted at 2022-08-23

基数変換

N進数

10進数:0〜9のの数字で数を表す
2進数:0と1の数字で数を表す
8進数:0〜7の数字で数を表す
16進数:0〜9、A〜Fの数字とアルファベットで数を表す

* Nは「使える数字の数」を表し、使える数字で収まり切らない時は、桁を上げていく
→ 2進数:2個(0,1,10,11,100...)
→ 8進数:8個(0,1,2,3,4,5,6,7,10,11...)

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 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F
16 10000 20 10

8進数:1桁0〜7の数値 → 2進数:0〜111(ひとつの桁で2進数3桁分(3ビット)の情報を表現)
16進数:1桁0〜16の数値 → 2進数:0〜1111(ひとつの桁で2進数4桁分(4ビット)の情報を表現)

基数(各桁の重みになる基本の数)

2進数 1 10 100 1000 10000
10進数 1 2 4 8 16
各桁の重み 2⁰ 2⁴

* 2進数の桁が増えると、10進数は2乗される
→ 2進数の各桁の重み

n進数が持つ各桁の重みの法則

整数部 小数点 少数部
nᴺ⁻¹ n⁰ . n⁻¹ n⁻² n⁻ᴺ
n番目 3桁目 2桁目 1桁目 1桁目 2桁目 n桁目

* n進数の各桁の重み
→ 基数と基数の変換ができるようになる

N進数 ↔︎ 10進数の基数変換

基数変換:基数であらわした数値を別の基数に換えること

N進数 → 10進数

10進数表記の求め方:各桁の数字に桁の重みを掛け算して足す
例) 332.5 = 100×3 + 10×3 + 1×2 + 0.1×5

2進数→10進数

2進数 1 0 1 . 1 0 1
× × × × × ×
2進数の重み 4 2 1 . 1/2 1/4 1/8
掛けて足す 4+ 0+ 1+ . 0.5+ 0+ 0.125

= 5.625 (10進数)

10進数 → N進数

整数部:割り算
少数部:掛け算

13.375 → 2進数
10進数→N進数.jpg
* 無限小数:小数点が無限に続く
→ 10進数表記では有限だが、基数変換すると無限少数になることも

2進数 ↔︎ 8・16進数の基数変換

2進数 → 8・16進数
2進数→8・16進数.jpg
8・16進数 → 2進数
8・16進数→ 2進数.jpg

補数と固定小数点

補数

2進数の足し算

10進数の足し算と変わらない
2進数_足し算.jpg

2進数の引き算

10進数の引き算と変わらない
2進数_引き算.jpg
0・1しか使えないコンピュータで負の数を表す方法
補数:2種類

  1. その桁数で最大値になるために補う数
  2. 次の桁数に繰り上がるために補う数

10進数の場合
9,10の補数.jpg
* 10進数3桁で表現してるため、桁上がりした「1」は無視
→ 123 + 877 = 000
→ 補数 877:123 の対の負の数と言える(9の補数 +1 = 10の補数)
2つの補数を使うことで負の数を表現できる

2進数の場合
1,2の補数.jpg
* 2進数4ビットで表現してるため、桁上がりの「1」は無視
→ 0011 + 1101 = 0000
→ 補数 1101 : 0011の対の負の数になる
コンピュータは負の数を表すのに2の補数を使う

(2の補数の求め方)
10進数[3]→ 2進数[0011]

  1. 全てのビットを反転させる
    1100
  2. 1を加える
    1101

2進数[1101] → 10進数[-3]

(引き算の流れ)
引き算_修正版.jpg

固定少数点

コンピュータ内部の数値の表現方法: 小数点の位置を決められた場所に固定する
固定小数点.jpg
2進数8ビットの固定小数点であらわせる整数の範囲
Nビットで表せる整数の範囲.jpg

浮動小数点

指数表記を使って数値を扱う
→ 大きい数、小さい数を固定小数点より少ないビット数で表せる

指数表記

指数表記.jpg
基数は固定なので、コンピュータは浮動小数点数の、残りの変化する部分(符号・仮数・指数)の値をビットに割り当てて数を表す。

正規化

正規化.jpg

浮動小数点の形式

「どこに何ビット割り当てるか」「どう正規化するか」が異なる

32ビットの形式

32ビット形式.jpg
例)10進数 0.375 を37ビット形式で表すとどうなるか?
10進数を32ビット形式へ.jpg

IEEE754の形式(32ビット)

IEEE754形式_jpg.jpg
* 仮数部 1.XXX で表す
→ 0.XXX の形よりも仮数部(M)で1ビット多く表現することができる
→ 指数部(E)に使えるビットが1つ増える
* バイアス:一定の数値を加えること
バイアス.jpg
* 指数に値を加える理由
→ 負の数を正の数だけで表せるため

例) 10進数 0.375をIEEE754の形式で表すとどうなるか?
IEEE754形式問題.jpg

誤差

実際の数値とコンピュータ内部で表現できる数値に差が生じる
→誤差が生じるのは5つの場合

桁あふれ誤差

演算結果、コンピュータの表現できる範囲を超えることで発生する誤差
桁あふれ誤差.jpg
*オーバーフロー:大きすぎて、表現できる範囲を超えること
*アンダーフロー:限りなく0に近いて、表現できる範囲を超えること

丸め誤差

切り捨て・切り上げ・四捨五入することで発生する誤差
丸め誤差.jpg

桁落ち誤差

有効桁数が減ることで発生する誤差
桁落ち誤差.jpg

情報落ち誤差

小さな数値が計算結果に反映されないことで発生する誤差
情報落ち誤差.jpg

打切り誤差

計算処理を打ち切ることで発生する誤差
例) 円周率:3.1415926535897932384626434....
→ 計算処理を打ち切って 「3.14」 とする

シフト演算

左右にビットをずらして掛け算や割り算をすること
シフト演算_10進数.jpg
* ◯倍の倍数は基数と桁の重みで決まる
→ 2進数: 2倍、1/2倍・・・
→ 10進数: 10倍、1/10倍・・・
* シフト演算には2種類ある

論理シフト

符号を考慮しないシフト演算
→ 最上位のビットも含めてシフトする
論理シフト.jpg

論理シフトにおいて「1」がはみ出した時

左論理シフト

掛け算の結果、ビットで表せる範囲を超えたということ
オーバフロー

右論理シフト

割り算の結果、割り切れず余りがはみ出る

算術シフト

符号を考慮するシフト演算
算術シフト.jpg

左算術シフト

符号ビットと異なる数字がはみ出した場合
→ オーバフロー

右算術シフト

1がはみ出した場合
→ 割り算の余り

2進数を2ⁿ以外の数字で計算する時

2進数×7.jpg

論理演算

  • 0 or 1 を使って行う演算(結果= 0 or 1)
  • 論理演算の回路 → CPUに組み込まれてる
    論理演算_論理回路.jpg

* 論理回路
MIL記号:論理回路を図式化
真理値表:入力と出力のパターンを表にしたもの

* 論理演算
→ 1:真(条件が成立していること) /2:偽(条件が成立していないこと)とみなして、
   0、1の2つの値で行う演算
論理式:論理演算を式にしたもの

論理和(OR) または

どちらか一方が1であれば、1
論理演算_論理和.jpg

論理積(AND) かつ

両方とも1のとき、 1
論理演算_論理積.jpg

否定(NOT) ではない

1のとき0 または 0のとき 1
論理演算_否定.jpg

論理演算の組み合わせ

否定論理和(NOR) 

論理和(OR) + 否定(NOT)
否定論理和.jpg

否定論理積(NAND)

論理積(AND) + 否定(NOT)
否定論理積.jpg

排他的論理和(EOR・XOR)

どちらかが1の時のみ、1
排他的論理和.jpg

ビット演算

目的

  • 特定のビット列 → 取り出し
  • 特定のビット列 → 反転
    ビット取り出し:反転.jpg
    ※ ビットの取り出し: 取り出したいビット部分 AND 1
    ※ ビットの反転: 取り出したいビット部分 EOR 1

ド・モルガンの法則

ド・モルガンの法則.jpg

半加算器・全加算器

加算器:2進数の足し算をする回路。
→ 上記の論理回路を使って「2進数の計算処理をする」

半加算器

上位桁への桁上がりのみ考慮した加算器

2進数の1桁の足し算
 2進数_1桁_足し算.jpg
入力値と出力の関係を真理値表に表す
半加算器_真理値表.jpg

全加算器

下位桁からの桁上がり、上位桁への桁上がりを考慮した加算器
全加算器_計算例.jpg
* 上記の計算では、2桁目以降は下位桁から繰り上がってくる可能性があり、半加算器だけでは対応できない
→ 2桁目以降は全加算器が必要

全加算器の仕組み
全加算器_仕組み.jpg
* 半加算器:半加算器 + 論理和回路 

計測と制御

データの表現方法

アナログデータ:連続して変化する情報 例) 音声・動画・アナログ時計
→ コンピュータで扱うためには、情報を区切って数値で表現する必要がある

ディジタルデータ:アナログデータを区切って、「0」「1」に置き換えた情報 
例) ディジタル時計:1分という範囲を60で区切り、数値化したもの

音声のデータ表現

PCM(Pulse Code Modulation)伝送方式 : アナログの音声データ → ディジタルデータ
→ 3段階で変換

1. 標本化(サンプリング)

アナログデータを時間単位で区切ること
標本化(サンプリング).jpg
* サンプリング周波数: 1秒あたりのサンプリング回数(単位:Hz)
→ 音楽CD: 44.1kHz = 44100Hz(1秒間に44100回の標本を得る)

2. 量子化

サンプリングしたデータを、縦に区切って数値にすること
量子化.jpg
* 区切る段階数 : 「標本を何ビットのデータで表すか」によって決まる
→  8ビット = 2⁸(256)段階
→ 各標本を段階に当てはめることで、数値化したディジタルデータになる

3. 符号化

取得した数値を2進数に直す

* サンプル周波数が短い・量子化の段階数が多い
元の音に近い&データ容量が大きい

コンピュータ制御

フィードバック制御:外部の影響をセンサが検知→コンピュータが修正を行う制御
フィードフォワード制御:外部の影響を予測できる場合に、前もって必要な修正を行う
シーケンス制御:あらかじめ定められた順序に従って、制御の各段階を進めていく

コンピュータ制御の要素

  • A/Dコンバーター
    A/D変換:アナログデータ → ディジタルデータに変換

  • センサ
    自然の色んな情報を計測して、電気信号へ変換
    例) ひずみゲージ : 物体の変形を検知
       ジャイロセンサ : 機器の角速度(回転の速度)、傾き、振動を検知
       人感センサ : 人の存在を検知

  • アクチュエータ
    電気信号を物理的な動作に変換(機器を動かす駆動装置のこと)

  • アンプ
    マイクロフォンやセンサなどが出力した小さな電気信号を増幅する

コンピュータの制御技術

PWM制御(Pulse Width Modulation)

モーターの回転速度や、LEDの明るさなどをディジタル信号で制御する方式
→ 信号の値は「オン」「オフ」のみ
→ 「オン」の時間を長くすると、電流が大きくなって速度や明るさを上げられる
PWM制御.jpg

クロック信号

コンピュータ内部の各装置の動作のタイミングをとる信号
→ 立ち上り・立ち下りのどっちかのタイミングに各装置をあわせている
→ 電圧を1,0の二つに変換
→ 高い電圧=1、低い電圧=0 『正論理』
→ 高い電圧=0、低い電圧=1 『負論理』
クロック信号.jpg

オートマトン

現在の状態・入力で出力が決定するシステム → モデル化
オートマトン_代表例.jpg

有限オートマトン : 初期状態 → 受理状態(終了状態)になるもの
状態遷移図 : オートマトンを図にしたもの
オートマトン_状態遷移図.jpg

状態遷移表 : オートマトンを表にしたもの
オートマトン_状態遷移表.jpg

AI (Artifical Intelligence) = 人工知能

人の知的な活動をコンピュータにさせること

機械学習

コンピュータが大量のデータ(ビックデータ)を使って学習すること
→ 機械学習の方法は3つ

教師あり学習

あらかじめ「問題」と「答え」を提示 → コンピュータが学習
例) 問題「猫の画像」 答え「猫」 → 猫の特徴を学習

教師なし学習

答えは提示せず、データをグループ分け(クラスタリング)→ 答えを自ら導く

強化学習

試行錯誤して、良い結果が得られる方法を学習
例) 将棋、囲碁などのゲーム用の人工知能

ディープラーニング(深層学習)

人の脳神経回路を真似したモデル(ニュートラルネットワーク)で学習すること

高度な社会

  • 超スマート社会: ITと現実空間が融合した社会
    • Society5.0の実現
    • SDGs: 全ての人が困窮せず、豊かに暮らす社会を目指す目標

線形代数

スカラーとベクトル

スカラー : 数値
ベクトル : スカラーを一列に並べたもの
→ 行ベクトル:横方向に並べたもの
→ 列ベクトル:縦方向に並べたもの
成分:ベクトルを構成する要素
行ベクトル_列ベクトル.jpg

行列

「行」「列」で構成
→ 行 : 横のまとまり
→ 列 : 縦のまとまり
行列.jpg
上からi行目、左からj行目の成分 = a ᵢʲ
→ a₁₂ = 6

行列の加算

同じ位置の成分同士を加算。
→ 行と列の数が同じ行列同士だけ加算できる
行列の加算.jpg

行列の◯倍

行列を2倍、3倍、1/2倍するとき → 各成分に掛ける
行列_2倍.jpg

行列同士の掛け算

行列A ✖️  行列B
→ Aの列数とBの行数が同じである必要性
行列同士_掛け算.jpg
 

逆行列

正方行列 : 行と列が同じ数の行列
単位行列 : 左上から対角線上の成分が1、それ以外の成分が0の正方行列
正方行列_単位行列.jpg

逆行列 
行列A ✖️ 行列B = 単位行列
→ 「BはAの逆行列

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0