
バイナリ負のスペース
この記事はシリーズの一部であり、シリーズインデックスにアクセスします。 ( シリーズインデックス )
バイナリを理解するための記事で説明したように、コンピュータがバイナリ数を0より小さく表現するためには、数学と同様にマイナス記号をその前に置くことはできません。代わりに、負の数値をバイナリにエンコードする方法を決定する必要があります。これが意味することを正確に理解するのは難しいですが、その意味を正確に理解しておきたいと思います。 8ビット(バイナリの記事を覚えておいてください)という数字の表現があるとしましょう。これらの8ビットは任意の記号として解釈できることを覚えておいてください。数字を選択するだけで、1と0で数えることができます。つまり、これらの8ビットは整数でも符号付きでもよいと言われていますが、他のものが符号付き数値(0より小さい値)として解釈するまではわかりません。これは通常、コンピュータ用に書かれたプログラムによって指定されます。結論として、バイナリで負の数を表すためにシステムを使用しているからといって、本質的に2進数を負にしないからです。客観的な目的や概念に本質的な価値がないように、一連のビットには本質的な意味はありません。
負の2進数を符号化(表現)する4つの最も一般的な方法は、「符号と大きさ」、「1の補数」、「2の補数」、および「余剰-K」として知られています。 数字ベース自体が実際に負(負の2)である負のバイナリのように普及していない代替方法もあります。
マグニチュードにサインする
バイナリ記事で前に述べたように、バイナリで符号付き整数を表現する最も簡単な方法は、シーケンス内のビットを割り当てて、その数値が負であるかどうかを伝えることです。たとえば、正の数の場合は1つの状態(ゼロ)に、負の数の場合は1つの状態(1つ)に設定します。そのビットは「記号」を表します。残りのシーケンスは、「大きさ」を「測定」、「サイズ」を「量」、「測定」を「量」と考えると分かりやすい「大きさ」を表します。 「番号」につながる。これは絶対値としても知られています。
前に書いたように、8ビットの数値があり、MSB(Most Significant Bit)を “sign”(よくあることですが)とすると、大きさは7ビットしか残っていません。 7ビットで最大127までの数値を表現できます。
ゼロはどうですか?さて、ゼロを表現するには2つの方法があります。正のゼロと負のゼロがあります。ワイルドハァッ?あなたがサインとしてMSB 0を使用しているとしましょう。この場合、ゼロは、それぞれ正のゼロと負のゼロである00000000と10000000の両方として表すことができます。
先進的なノートでは、誰でも知っている人にとって、符号と大きさは、通常、「浮動小数点」値の「仮数」がどのように表されるかです。
私を補う
この概念は、バイナリロジック(別の記事)の理解を必要とします。
バイナリロジック記事で言及されていないのは、これらのブール演算を一連のビットに適用できることです。これが起こると、それは「ビット単位の操作」と呼ばれます。スクリプト言語を含む多くのプログラミング言語で「ビット演算」が見つかります。これらのプログラミング言語には、C、C ++、C#、Java、Pascalなどのサンプルが含まれています。
2進数の1の補数表現では、正の数の負の表現は、正の数に適用されたビットごとのNOT演算子の結果です。
一例として、01001111(79)の1の補数形式は10110000(-79)です。それは簡単です(年、右)。負の形の数値は、-0から減算することもできるため、これは1の補数と呼ばれます(11111111ゼロの1の補数表現)。
余分な注記として、ゼロは、1の補数の負の表現システムでは、+0 – 00000000と-0 – 11111111の2つの方法で表現できます。
2つの補完?
2の補数は、補数の問題にパッチを当てようとする別のシステムです。 1つの補数にはゼロの2つの表現があり、2つの数値を加算すると複雑なキャリー演算が行われます。
2の補数は1の補数に実際に頼りますが、幾分それを「改善」します。単純に言えば、2の補数における負の表現は、同じ負の数の1の補数表現よりも大きいものである。実際には、2の補数を生成する2つの簡単な方法です
第1の方法は、小道具の短手細工を含む。私はそれが本当にコアの前提を説明しているとは思わないので、他の人が行うように、短所を説明するのは好きではありません。あなたが見ているのが短手手品です。しかし、私はあなたがこれを扱うことができるように、これまでに2の補数の核心を説明したと思います。
基本的には、101010などの特定のビットシーケンスから始めます。次に、最初の1ビットの左にあるすべてのビットをビット単位でNOTします。たとえば、010110に到着します。 101010でビット単位でNOTを実行すると、010101が得られます.1つ追加すると010110が得られます。最初のビットの右側にあるものは、ビットの追加によって上書きされます。
それを見るもう1つの方法は、8ビットと言うことを考えることです(しかし、より高い数字を考えることはできます)。 8ビットは0(00000000)から始まり、127(01111111)に上がり、次に-128(10000000)に達するでしょう。それはちょうど方法です-128です。次に、01111111 – > 10000001の2の補数である-127になります。
ゼロの00000000は1つだけです。これは、0の2の補数を生成しようとすると、最初のステップ11111111に入りますが、追加すると00000000に戻ります。
補完加算も単純化されています(実際には入っていません)。 2の2の補数を追加するには、正の数のように追加するかのように追加します。簡単なペイズリー。
過剰なケロッグの
余剰K(余剰Nとしても知られている)は単にバイアスと呼ばれるオフセットです。 K(またはN)は偏りの量を表す。バイアスは何を意味しますか?基本的には、任意の数値の負の表現は、その数に加えられたバイアスです。これは、バイアスによって表されるゼロを作り、00000000は、負のバイアスを表す。私が理解しているように、バイアスを表現するのに必要なビット数に応じて、これはすべて完了です。このようにして、MSB(Most Significant Bit)は符号及び大きさの方法と同様に符号情報を運ぶ。
Excess-Kに2つの数字を追加するには、いくつかの算術演算を行う必要があります。私はこのことが面白かったので、私はそれをあなたと共有します。あなたはA、B、Cを持っています。A + B = C + K、したがってC =(A + B) – Kです。
過剰Kは、一般に、数の指数の浮動小数点表現で使用されます。倍精度指数が必要な場合は、11ビットのExcess-1023バイナリ表現を使用します。
負のバイナリ
さて、ベース-2と呼ばれるものがあります。 バイナリについて話し合ったときに私はそれが本当にベース2だったことについて話しました。 2のべき乗は2進数の位置値でしたか? 基本-2では、負の2が数値システムの基底です。 私が意味するものの図は次のとおりです:
ベース-2についてのことは、数字を表すその能力が偏っていることです。 偶数のビットがある場合、最大の表現可能な負の数は、可能な最高の正の値の2倍の大きさであり、奇数のビットがある場合、その逆は真である。最大の表現可能な正の数は、 可能な限り低い負の値の値。 私はそれをあなたの読者に任せ、それを働かせます。
結論
それで、皆さん! 負の2進数を表現するには多くの方法があります。 マイクロプロセッサの技術者が私に同意しないと確信しているにもかかわらず、他のものより必ずしも「良い」ものはありません。 多くの場合、特定の表現が選択されます。これは、特定のマイクロプロセッサ用に簡単に作成できるためです。 プログラマが通常得ることができるプロセッサレベルに近いアセンブリ言語でプログラミングするときは、符号付き表現(負の可能性もあります)または符号なし表現を扱っているかどうかを確認する必要があります。 ときにはマイクロプロセッサにフラグがありますが、一連のビットは符号付きの値(負の可能性もある)として解釈できることを覚えておいてください。
あなたが私の執筆を感謝するなら、私のパトロンを通して私を支えてください。( パトロン )
photo credit: Verdun en négatif via photopin (license)