ベストアンサー
真理値表は、次の可能な組み合わせに対するブール関数の出力を提供する表です。入力。全加算器はブール関数(またはそれを実装するハードウェアの一部)であり、2つの2ビット整数が与えられると、キャリーオーバーを含むそれらの整数の合計が得られます。 (半加算器は数値を加算するだけで、キャリーオーバーは無視します)。入力として2つの2ビット整数がある場合、16の可能な入力があるため、テーブルには16行が含まれます。入力がビット付きのaとbの場合、出力はxabx 00 00 000 00 01 001 00 10 010 00 1 1 011 01 00 001 01 01 010 01 10 011 01 11100 11 00 011 10 01 011 10 10100 10 11101 11 00 011 11 01100 11 10101 11 11110
回答
glibの回答は、「設計者が望むものは何でも」です。
1970年代後半にコンピューターの設計を検討し始めたとき、私は数学のバックグラウンドを持っていましたが、コンピュータープログラミングのバックグラウンドもありました。初期の作業の一部には、命令セットの設計と実装が含まれていました。特に算術演算については、コンピューターの算術を理解する必要があり、背景から少し抽象的な数学的な観点からやったのですが、これはレイアウトとは対照的でした。機能(加算器など)とその実装を説明しているが、必ずしも動機付けを与えていない多くの電子機器やコンピューター設計の教科書で。
動機付け加算器を実装するためのイオンは、数値を表す2セットのビット(「ワード」)を取得し、それらのビットの合計を表す出力を生成することです。ここで尋ねる重要な質問が3つあります。まず、私たちが表現しようとしている数字は何ですか。次に、これらの数値はどのようにビットとして表されますか。そして第3に、2つの数値の合計をビットのセットとして表すことができない場合に何が起こるかを想定しています。
一般的な状況(Nビット、リトルエンディアン、符号なし整数)は、 Nビットワードは整数[0,2^N-1],
を表すために使用され、ワード B[N-1]...B[0]
は値ΣB[i]2^i: i in [0,N-1].
3番目の質問は問題です。2つの入力の合計が[0,2*(2^N-1)]
の範囲にある可能性があるため、表現できない結果があります。
A 「Nビット加算器」の単純な教科書実装は、N個の「1ビット全加算器」から構築されます。 2組のNオペランドビットに加えて、キャリーインビット(強制的にゼロ)とキャリーアウトビットがあります。加算の数学的結果を表すことができる場合、加算器からの結果のNビットは結果の正しい表現になり、キャリーアウトは0になります。一方、加算を表すことができない場合、加算器からの結果のNビットは2 ^ Nを法とする結果の正しい表現になり、キャリーアウトは1になります。要約すると、この加算器は常に2を法とする正しい結果を生成します。 ^ Nと実行は、正しい結果を表現できないことを示します。一部のコンピュータシステムでは、これをエラーとして扱い、フラグに記録したり、例外を発生させたりする場合があります。
もう1つの一般的な状況(Nビット、リトルエンディアン、符号付き2の補数整数)は、 Nビットワードは整数[-2^(N-1),2^(N-1)-1],
を表すために使用され、ワード B[N-1]...B[0]
は値 -B[N-1]*2^N + ΣB[i]2^i: i in [0,N-1]*.
繰り返しますが、表現できない結果があります。前述の加算器は、表現可能なすべての結果に対して正しい結果を生成しました(これが、2の補数演算が使用される理由です)。ただし、キャリーアウトは、結果が表現可能かどうかを示すものではありません。 (キャリーアウトを生成する-1 + 1 = 0と、生成しない0 + 0 = 0を考慮してください)。 2の補数の場合、表現できない結果(一般に「オーバーフロー」と呼ばれる)を表す条件は、結果の符号ビット(最上位ビット)が「予期しない」、つまり2つの負の数の合計が正のように見えることです。 2つの正の数の合計は負のように見えます(2つの異なる符号の合計が常に表現できることを示すために読者に行使してください)。
他のいくつかの表現は同じ加算器を使用できる場合があります。符号付きおよび符号なし整数として。単語の値が整数として扱われ、2の累乗で除算された単語の値である分数表現の場合、値が表現可能である場合、加算器は正しい結果を生成します。ただし、これらの表現を使用するシステムでは、結果が「飽和」するという望ましい動作が必要になる場合があります。つまり、結果が範囲外であり、必要に応じて、合計が最も正または最も負の値になります。他のシステム2エラー値として使用する値の1つ(通常は10…0)。エラー値はその後の操作で伝播します。この場合、特別な加算器が必要になります。
*この定式化により、2の補数形式が明示されます。つまり、ワードの符号付きの値は、ワードの符号なしの値からトップビット(符号ビット)の2 ^ N倍を引いたものです。 同様に、値は-B[N-1]*2^(N-1) + ΣB[i]2^i: i in [0,N-2]
と書くことができます。これは、0または+1ではなく0または-1を表す最上位ビットに対応します。