- 2bitの足し算は,2種類の加算器で行われる
- 最下位bit(一番右の桁bit) は2bit加算器で,それ以外の桁は,3bit加算器で計算する
- なぜなら,最下位bitは桁上がりを考慮する必要がないのに対して,最下位以外のbitは,二つのbit値と,直前のbitの桁上がりを考慮する必要があるから.
- 桁上がりのbit値はキャリービットという
- 4bit同士の足し算において,和が5bitになったら,その最上位bitは破棄される
符号付き2進数の表し方 - 2進数のコードを,符号付で表すためには,2nの領域を均等に二つに分ける必要がある.
補数(基数の補数)
補数とは,2進数コードにおける,符号付き整数の表現 この”補数”の語源が非常に興味深い
$notx = 2^n - $x
照明のために 例えば,4bitのある値を-にして,計算すると
x + (-x) = 0
を計算すると,10000となり,オーバーフローの切り捨てで 実質的には0000になる.この1の後に0がn個の続く様子が “補数”の語源となる。
nbit 2進数システムにおける補数表現の性質
- 正の数の最上位bitは,0
- 負の数の最上位bitは,1
xから-xを得る方法
方法1:最下位bitから桁を繰り上げてみていき,1が出現するbitに遭遇したら,その次のbitより値を反転させる
ex)
0001 → 1110 // 最下位bitに1があるので,次のbitから反転 0100 → 1000 // 最下位bitから3番目に初めて1から出現するので,次の最上位bitだけ反転
方法2:xの全てのbitを反転させた値に1を足す
まとめ
- 2の補数を用いることで,単純なbit単位の加算のみで正・負の表現ができる
算術論理演算子 ALU
ALUとは
プリミティブゲートの集合体. 二つの値に対して,あらゆる計算を行うことができる優れもの.
プロジェクト
- sum → Xorの出力
- carry → Andの出力
- あらかじめ変数を計算・用意して,Muxでif分岐,とすると,割とすんなり行ける.
- 部分的に配列から代入することは出来ない.例えば,以下のような
Mux(a = true, b = false, sel = tmpOut[15], out = zr);
- 判定の,0にするかどうか? → 反転させるかどうか? という順番に注意.
全てのフラグが1のとき
x → 0000 → 1111 y → 0000 → 1111
となり,この2値を足し合わせて 1110となるから(オーバーbit切り捨て) それを反転させて 0001,つまり10進数の1になる.という箇所が肝.