1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

論理回路の基礎 #2 論理演算

Last updated at Posted at 2018-07-17

レジスタとALU

レジスタとALUという言葉を聞いたことがあるでしょうか?
これは、CPUの内部にある一番コアな部分の名称です。

簡単に例えると、レジスタとは「コンピュータが今考えていること。」にあたります。

コンピュータ上では、ある程度のビットをまとめて扱っており、その量はCPUのビット数によって変わってきます。32ビットCPUであれば32個の、64ビットCPUであれば64個のビット列を同時に処理することができます。

このビットの量がまさにレジスタの記憶容量になっているのです。
レジスタは現代のマルチプロセッサでは1コア当たり16個の汎用レジスタが存在しており、基本的には、1クロックで値が入れ替わります。1

そしてこれを読み込むのがALUとなっています。
ALUとは各演算に対応した回路が組み込まれており、指定された演算回路を提供するための、電子回路です。
足し算をする命令が来ていれば足し算の回路を、ビットシフトをする命令が来ていればビットシフトの回路を提供しているということです。

要するにCPU内では、

レジスタが命令とデータを保持し、ALUがそれを処理している

のです。

このことを考えるにあたって、重要になってくるのが2進数の演算: 論理演算です。(少し語弊がありますが、大体間違っていない。)2
CPUは基本的に2進数以外扱うことができません。そのため、2進数をどうやって、10進数や文字など現実に使用しうるものにするか?ということを考える必要があったわけです。

2進数の演算(論理演算)

コンピュータ業界の中で、よく使われる2進数。ですが、論理だてて学んだことはないかもしれません。
基礎的な部分を少し見てみましょう。
(そんなの知ってるよ。って人は飛ばしてね!)

論理演算の基礎

論理演算は、論理和・論理積と呼ばれるものと否定というもので成り立っています。

まず、論理和から見ていきましょう。
論理和とは、いわゆるORにあたるもので記号は∨もしくは+で表されます。
実際の1ビットの演算では、以下のような結果になります。

0 \lor 0 = 0\\
0 \lor 1 = 1\\
1 \lor 0 = 1\\
1 \lor 1 = 1\\
もしくは\\
0 + 0 = 0\\
0 + 1 = 1\\
1 + 0 = 1\\
1 + 1 = 1\\

次に、論理積です。
論理積とは、いわゆるANDにあたるもので記号は∧もしくは・であらわされます。
実際の演算では以下のような結果になります。

0 \land 0 = 0\\
0 \land 1 = 0\\
1 \land 0 = 0\\
1 \land 1 = 1\\
もしくは\\
0 \cdot 0 = 0\\
0 \cdot 1 = 0\\
1 \cdot 0 = 0\\
1 \cdot 1 = 1\\

これら2つは2つの項目を結ぶ2項演算子と呼ばれるものです。
それに対して、もう一つのNOTは単項演算子です。
これは、いわゆる否定(プログラムの中だと良く!マークであらわされます)にあたるもので、記号は上部に横棒もしくは¬であらわされます。

\overline 0 = 1\\
\overline 1 = 0\\
もしくは\\
\neg 0 = 1\\
\neg 1 = 0\\

この3つを基本として、成り立っていくのが論理演算です。

結合法則・交換法則・分配法則

さてはて、この論理演算の名前に和・積という名前がついていますが、これはなぜか?というと3

通常の足し算・掛け算のように交換法則・結合法則・分配法則
が成り立つからなんです。例えば、交換法則であれば

A + B = B + A\\
A \cdot B = B \cdot A\\

とか結合法則なら

A + \left(B + C\right) = \left(A + B\right) + C\\
\left(A \cdot B\right) \cdot C = A \cdot \left(B \cdot C\right)\\

だったり、分配法則であれば

A\cdot \left(B + C\right) = A \cdot B + A \cdot C

こんな風になります。

否定に関しても、実際のマイナスと同じような扱いになります。

\overline {\overline A} = A\\
\overline {\overline {\overline A}} = \overline A

何となく論理演算のイメージがつかめたでしょうか?
基本的には、普通の足し算・掛け算と変わらないと思うとそんなには、難しくないかと思います。

次回は、この論理演算にしかない、特殊な法則(吸収法則・ド=モルガンの法則)に関して書こうと思います。
では、また。

勉強会のお知らせ

この記事は、勉強会の資料を兼ねて書かれたものです。
2018/08/09 19:30~
溜池山王:細川ビル3階会議室で、勉強会を行います。
よろしければ、ふるってご参加くださいね!

  1. クロックはCPUが一つの処理を行える最小単位。公称2GHzのCPUで1クロック当たり約500psとなる。

  2. 「論理演算は2進数の演算である。」これは正しいけど、「2進数の演算は論理演算である。」これは間違い。コンピュータの細かな素子一つ一つは論理演算しかできないが、それを組み合わせることによって論理演算から2進数の演算に拡張している。そのためにはキャリーフラグ・ボローフラグ(興味があったら調べてみると面白いかも)などがあり、論理演算のみで、足し算・掛け算を論理演算のみで行うことはできない。

  3. この辺に興味ある人は大学課程の代数学(線形代数じゃないよ!)が面白いのでおススメ。

1
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?