Ray Wang

Ray Wang

twitter

原码、反码及补码

最初に、コンピュータ内のすべてのデータは 2 進数で保存されています(0 または 1)。符号付き数値の符号も 0 または 1 で表されるため、2 進数の最上位ビットが 0 の場合は「正数」を表し、1 の場合は「負数」を表します。

オリジナルコードを使用した計算#

数値 2 と - 2 を考えます:

  • +2 のオリジナルコードは 0000_0010
  • -2 のオリジナルコードは 1000_0010

2 + (-2) を計算する場合

0000_0010 + 1000_0010 = 1000_0100(10 進数の -4

明らかに、上記の計算結果は望ましい結果ではありません。

反転コードを使用した計算#

上記の問題を解決するために、「反転コード」を導入します。

反転コード:「正数」の反転コードは「オリジナルコード」と同じであり、「負数」の反転コードは符号ビットを除いて他のビットを反転させます。

  • +2 の反転コードは 0000_0010
  • -2 の反転コードは 1111_1101

再び 2 + (-2) を計算します。

0000_0010 + 1111_1101 = 1111_1111
上記の計算結果 1111_1111 は反転コードであり、オリジナルコードに変換すると 1000_0000 つまり 10 進数の -0 になります。

以上から、反転コードを使用すると +0-0 の問題が発生することがわかります。

補数を使用した計算#

反転コードに基づいて、「補数」を導入します。

補数:正数の補数はオリジナルコードと同じであり、負数の補数は「反転コード」に 1 を加えたものです。

  • +2 の補数は 0000_0010
  • -2 の補数は 1111_1110

再び 2 + (-2) を計算します。

0000_0010 + 1111_1110 = 0000_0000
上記の結果は正確に求めた結果であり、したがってコンピュータでは補数を使用して計算を行います。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。