1. ホーム
  2. binary

[解決済み] 2の補数 "とは何ですか?

2022-03-21 02:56:49

質問

コンピュータ・システム・コースに所属しており、これまで 苦戦中 である。 2の補数 . 理解したいのですが、何を読んでも絵が浮かんできません。私が読んだのは ウィキペディア記事 をはじめ、様々な記事があります。 私の教科書 .

それゆえ、私はこれを始めたいと思ったのです。 コミュニティWiki の投稿で、2の補数とは何か、どのように使うか、そしてキャスト(符号付きから符号なし、またはその逆)、ビット単位の演算、ビットシフト演算などの演算中にどのように数値に影響を与えるかを定義しています。

私が期待しているのは 明確で簡潔な定義 プログラマーが理解しやすいように。

どのように解決するのですか?

2の補数 は、整数を格納する巧妙な方法なので、一般的な数学の問題を非常に簡単に実装することができます。

理解するためには、数字を考えて バイナリ .

基本的には書いてあります。

  • の場合、すべて0を使用します。
  • 正の整数の場合、カウントアップを開始し、最大で2 (ビット数 - 1) -1.
  • 負の整数の場合は、まったく同じことをしますが、0と1の役割を入れ替えてカウントダウンします(つまり、0000から始めるのではなく、1111から始めます - これがquot;complement"の部分です)。

では、4ビットのミニバイト(ここでは ニブル - 1/2バイト)。

  • 0000 - ゼロ
  • 0001 - 一
  • 0010 - 二
  • 0011 - スリー
  • 01000111 - 4〜7

ポジティブに考えるとここまでです。2 3 -1 = 7.

ネガティブの場合

  • 1111 - ネガティブワン
  • 1110 - マイナス2
  • 1101 - マイナス3
  • 1100 から 1000 - マイナス4からマイナス8

ネガティブの場合は、値が1つ増えることに注意してください ( 1000 = -8)であり、陽性の場合はそうではない。これは 0000 はゼロのために使われます。これは、次のように考えることができます。 数列 コンピュータの

正の数と負の数の区別

こうすることで、最初のビットが符号ビットとなり、10進数で負でない値と負である値を区別することができるようになります。もし最上位ビットが 1 であれば、その2進数は負であると言えますが、最上位ビット(左端)が 0 10進数の値は非負であると言えます。

符号付きマグニチュード。 負の数は、正の数の符号ビットを反転させるだけですが、この方法では、次のような解釈が必要になります。 1000 (一 1 に続いて、すべての 0 をquot;negative zero"と呼ぶのは紛らわしいです。

補語となるもの。 負の数は正の数のビット補数であるため、「負のゼロ」と混同されることがあります。 1111 (すべて1)です。

ハードウェアに近いところで作業しない限り、「Ones' Complement」や「Sign-Magnitude」の整数表現を扱う必要はないでしょう。