1

私は単純な概念のように見えるものに苦労してきましたが、バイナリ変換を組み合わせたり混同したりし続けているようです。

2 進数で与えられた数値に 1 の補数を適用すると、すべてのビットが反転します。0を1、1を0にする。2 の補数の場合は、1 の補数のようにビットを反転して 1 を加算します。

これは、文字通りすべてのビットを反転させるということですか? 何らかの理由で、左端のビット (符号ビット) を除いて、すべてのビットを反転する必要があると考え続けています。ここにいくつかの例があります..私がこれを正しく行っているかどうか教えてもらえますか?

1101001

1のコンプ: 0010110

2のコンプ: 0010111


01110101

1のコンプ: 10001010

2 のコンプ: 10001011


011110110

1のコンプ: 100001001

2 のコンプ: 100001011


ありがとう。

4

1 に答える 1

1

あなたの概念は完全に正しいです:

  • 1 の補数 = すべてを反転する
  • 2 の補数 =左端のビットを含むすべてを反転し、 1 を加算

最初の 2 つの例は正しいですが、通常は複数のバイト (8 ビット) で作業し、例には 9 ビットがあるため、最後の例は少し奇妙ですが、それでも同じルールが適用されます。

        (0000000)011110110
ones -> (1111111)100001001
twos -> (1111111)100001010  <-- I think you had a typo here, you stated the result would be 100001011

これは、主題に関する素晴らしい要約記事です: http://academic.evergreen.edu/projects/biophysics/technotes/program/2s_comp.htm

于 2013-03-15T21:17:24.010 に答える