あなたはほぼ間違いなく負の数について聞いたことがあるでしょう。 コンピュータサイエンスとコンピュータプログラミングの世界に少しでも触れたことがあるなら、2進数の概念は完全に異質ではありません。 しかし、プログラミングの世界を個人的に探求したことがない限り、おそらく2進数を実質的に扱ったことはありません。
コンピュータは自分で「考える」または「決定する」ことはできませんが、順序付けられた指示に確実に従うことができるため、数学者はずっと前にやって来ました コンピューター(または十分に忍耐強い人間)が0と数字だけを使用して加算、減算、およびその他の数学演算を実行する方法を考え出します。 1.
しかし、これら2つのアイデアを組み合わせて負の数を生成する方法はありますか? ペンと紙の既存の数字の前に小さな水平バーを貼り付けるようにマシンに指示するのと同じくらい簡単ですか、それとも「ビットとバイト」の要素が物事をより複雑にしますか?
2進数とは何ですか?
コンピュータは膨大な量の処理能力を持っており、古いクランカーでさえ、最も算術的に才能のある人間でさえ理解できないような速度で計算を実行することができます。 しかし、それらは頭脳ではなく、複雑な情報を処理するための唯一の方法は、可能なすべてを2つの状態(たとえば、オンまたはオフ)のいずれかに委ねることです。
「computer-ese」では、単一の0または1は ビット. これらのグループには、 ニブル (4ビット)、よく知られている バイト (8)、 語 (1)と 長い言葉 (32).
492や35のように、通常表示される10進数は、10個の累進記号(0から9の数字)が含まれているため、「基数10」です。 次の場所、つまり次の「10の累乗」に「ロールオーバー」します。 代わりに、2進数には2つの記号(0と1の数字)のみが含まれ、 「ベース2」 数字の末尾から左に移動するたびに、2の累乗が増加します。末尾の数字は、1、次の2、4、8、16、および など。
- 10進数は、基数10システムの任意の数値であり、必ずしも小数点を含む数値である必要はありません。
2進数の例
バイナリ「ニブル」0101は、1位と4位に1があり、2位と8位に0があります。 したがって、それに相当する10進数は1 + 4 = 5です。
同様に、バイト1001 1100は、128 + 16 + 8 + 4(28 + 25 + 24 + 23) = 156.
ザ・ 補体 2進数のは、数字が「切り替えられた」数字です。 たとえば、1001 1100 = 01100011の補数です。
負の数を2進数に変換する
負の10進数を2進数に変換する方法は、おそらく他の数値変換とはまったく異なります。 あなたの心は、そのすべての比較のナマケモノのために、ほとんどの点で他のどの方法よりもはるかに柔軟であるため、あなたは演奏しました CPU。 ただし、これは簡単なプロセスです。
変換は、 2の補数バイナリ、これには、プログラマーが1で始まる2進数を負として解釈するようにコンピューターに指示する必要があります。 その後、プログラムは 対応する正の数を2進数で作成し、その補数を取り、1を加算します。
たとえば、数値が-47の場合、コンピュータは+47の2進数を作成します。
0001 1111
これを補完するものは次のとおりです。
1110 0000
これに1つ追加すると、次のようになります。
1110 0001
コンピューターはこれらの数値に「署名」して、先頭の1を負として扱い、記号1が占める2の累乗を単純に合計するのとは異なる方法で結果を処理することに注意してください。