【基本情報・Chapter3】コンピュータの回路

<font color="MediumPurple">**今日は論理回路に関する知識をまとめます。
お気づきの点がございましたら、ご指摘いただけると幸甚です。ᐖ**</font>
<font color="MediumPurple"></font>


## <font color="MediumPurple">論理回路</font>


#### 論理演算
*logical operation*
論理演算とは、ある事象が真か偽かを判断する演算のことである。
コンピュータの世界では、真を1として、偽を0として扱いますので、論理演算の結果は必ず0か1となる。論理演算においては、2つの真偽値を入力し、演算結果として真偽のいずれかを出力する。

**★基本的な論理演算は、論理積（*AND*）、論理和（*OR*）、否定（*NOT*）の3つから構成される。**
- 論理積　
*AND*　**与**
X「かつ」Yが真なら真
- 論理和
*OR*　**或**
X「または」Yが真なら真
- 否定
*NOT*　**非**
入力を反対に出力する

#### 論理回路
*IC・logic circuit*
論理演算する回路が論理回路。
コンピュータにおいてはすべての処理や計算を0と1で実現していますので、算術演算やロジック処理を実施するためには多数の論理回路が必要となる。処理を実現するために、コンピュータ内部にはAND演算やOR演算などを行う論理回路が大量に搭載されており、高速で動作している。
#### 基本回路
論理回路の基本要素はAND回路とOR回路、NOT回路の3種類だけで、その組み合わせで様々な機能の回路が作成できる。
- **論理積回路**
*AND circuit*
入力値がすべて１のときに１を出力する。それ以外の入力値のときは0を出力する。
　　　　 　<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850773/9f19151b-4afd-9c50-da9e-180979890a39.png">

- **論理和回路**
*OR circuit*
入力値にいずれか１が入力されたときに１を出力する。それ以外の入力値のときは0を出力する。
　　　　　<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850773/be5f4b20-8331-0360-da87-44846d67fd3f.png">
     
- **否定回路**
*NOT circuit*
入力された値が１なら0に、0なら1に反転する。
　　　　　<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850773/9d5e3440-009e-4d69-d8d9-6a1b256de606.png">

**★上記の3つの基本回路を組み合わせすると、さらに様々な複雑な論理回路を作り出すことができます。(´✧ω✧｀)**
- **否定論理積回路**
*NAND circuit*　**与非门**
AND出力を否定（NOT）したものである。すべての入力値が1のとき0を出力する。それ以外のときは、1を出力する。

　　　　　　<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850773/14922208-dc70-3ae2-a76c-071df7a01d7d.png">

- **否定論理和回路**
*NOR circuit*　**或非门**
OR出力を否定（NOT）したものである。すべての入力値が0のとき1を出力する。それ以外のときは、0を出力する。


　　　　　　<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850773/2b66fbfc-786e-0077-783a-8bc5587e9a7c.png">
- **排他的論理和回路**
*EOR・XOR circuit*　**异或门**
入力値が違うとき1を出力する。それ以外（入力値が同じとき）は、0を出力する。

　　　　　　<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850773/c64d76d0-01d3-c9d6-18e0-39a9e1002ebb.png">
#### ド・モルガンの定理
*De Morgan's laws*
ブール論理や集合の代数学において、論理和と論理積と否定（集合のことばでは、和集合と共通部分と差集合）の間に成り立つ規則性である。

　　　　　　　　　　　<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850773/4e929aef-0337-e034-da27-71806c0fdd90.png">

**★以上の内容をまとめましょうo( ˙-˙ )o♡**

　　　<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850773/ee485a09-0d71-e953-8ba8-1f10bcab9fe2.png">



## <font color="MediumPurple">半加算器と全加算器</font>
#### 半加算器
*half adder*
2進数の加算（足し算）を行う論理回路（加算器）のうち、下の桁からの繰り上がりを考慮せず、単純に二数の和のみを求める回路のこと。より複雑な加算器の構成要素となる。
以下の図のようなAND回路、OR回路、NOT回路を組み合わせた回路を半加算回路と呼ぶ。

　　　　　<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850773/f38c3f36-c712-a9eb-88a2-a1a60d01b6cb.png">
- **C（*Carry*）**：桁上がりした、2桁目の数にあたる出力
- **S（*Sum*）**：1桁目の数にあたる出力
すなわち、２進数の１桁の加算ができる論理回路である。
例えば、A=1, B=1のとき、C=1, S=0となる。
#### 全加算器
*full adder*
半加算回路では１桁の計算しかできないが、下図のように半加算回路を組み合わせることで、下からの桁上がりを考慮した加算器ができる。これを全加算回路と呼ぶ。
この全加算回路をさらに組み合わせれば、任意の桁数の加算回路が実現できる。

　　　　　<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850773/62f6f85a-2239-7422-7964-5b4529a8b58f.png">



## <font color="MediumPurple">ビット演算・操作</font>
#### ビット演算・操作
*bitwise operation*
固定長のワードなどといった「ビットのカタマリ」（コンピュータの数値表現なども参照）に対して、各々のビット全てに対する論理演算をいっぺんに行う演算操作である。

- **ビット反転させる**：排他的論理和（EOR、XOR）を用いる。
`00000011`（反転させたいビット列）
`11111111`（反転させたい位置に1を入れたビット列を用意する）
XORをとる結果　↓
`11111100`（元のビット列を反転させた）
★**マスクパターン**　*mask pattern*
「ビットを反転させたい位置に１を入れたビット列」のこと
`00000011`（反転させたいビット列）
`00001111`（後ろ4ビットだけ反転させたいとき用意する列）
XORをとる結果　↓
`00001100`
- **特定のビットを取り出す**：論理積(AND)を用いる。
`01101011`（対象となる元のビット列）
`00001111`（取り出したい位置に1を入れたビット列）
ANDをとる結果　↓
`00001011`

***
<font color="MediumPurple">**ここまで読んでくれて
お疲れ様です！
ありがとうございました！(⁎ᵕᴗᵕ⁎)**</font>