3

私は、これら 2 つのシステムの違いと、C プログラミングへの影響を理解しようとしています。

ウィキペディアから学んだことから:

  1. どちらのシステムも負の数を表すために使用されます
  2. 1 の補数はビット単位の NOT を負の数に適用します (システムには +0 と -0 があります)
  3. 2 の補数はステップ 2 と同様に実行され、1 が追加されます (+/-0 が削除されます)。

他に何か不足していますか?

私の質問:

  1. どのアーキテクチャがどのシステムをサポートしていますか? 最近最も一般的なものは何ですか (1 の補数または 2 の補数)?
  2. Cでプログラミングするとき、これらのシステムをどのような意味で考慮する必要がありますか? それは主に組み込みの世界でのみ意味がありますか?

前もって感謝します!

4

2 に答える 2

4

現在、ほとんどのシステムは 2 の補数を使用しています。これにより、コンピューターは数値の特定の符号を気にすることなく、加算/減算に対してまったく同じ操作を行うことができます。

プログラミングをしている場合、使用するシステムに関係なく算術演算が機能します。データ型の範囲は言語によって定義されているため、型が -2^31 から +2^31 - 1 の範囲で機能すると言われている場合の場合、表記に関係なく動作します。ただし、個々のビットまたはビット シフトを扱う場合は注意が必要です。これらは、非 2 の補数系では 2 のべき乗演算のようには動作しません (ただし、そのような系に遭遇する可能性はあまり高くなく、おそらくPC だけで作業している場合は、決してそうはなりません)。

于 2011-01-05T03:55:12.553 に答える
0

整数の 1 の補数表記の唯一の利点は、キャリー チェーンなしで符号-絶対値形式との間の変換を実行できることです。レジスタが 2 の補数形式を使用する場合よりも 1 の補数形式を使用する場合、各レジスタの値を符号と大きさの形式で示す一連の点滅ライトを備えたコンピューターを構築する方がはるかに便利です。点滅灯と CPU のレジスタに別々のストレージ ラッチを使用したい場合、最も簡単な方法は、2 の補数を 1 の補数または符号の大きさの形式に変換する回路を 1 つ用意し、各レジスタに同時に書き込むことです。 2 の補数の値をレジスタに保存し、blinkenlight ラッチを符号の大きさの値で更新します。

Over the last few decades, of course, the relative costs of different circuit elements have shifted to the point that it would be absurd to have lights wired to directly report the state of a CPU's registers. Consequently, the practical advantages that ones'-complement designs might have had in the past are no longer applicable.

于 2016-12-29T18:54:40.287 に答える