回答:
これらの用語で考えてください。前に符号が付いた2ビットの数値をとります。
000 = 0
001 = 1
010 = 2
011 = 3
ここで、いくつかの欠点を見てみましょう。
111 = -1
110 = -2
101 = -3
ちょっと待って
100 ...
符号ビットが1であるため、負である必要があります。したがって、論理的には-4でなければなりません。
(編集:WorldEngineerが正しく指摘しているように、すべての番号付けシステムがこのように機能するわけではありませんが、あなたが求めているものは機能します。)
整数の範囲には2つのクラスの数ではなく、3つのクラスがあるためです。負の数、ゼロ、正の数です。ゼロはスロットを占有する必要があります(ゼロを表現できないようにするのは実際的ではありません...)。その犠牲を払わなければならないのは通常正の範囲であるという事実はある程度恣意的ですが、ビット操作のレベルでは、この決定によってより便利になることがいくつかあります。
符号付き整数を2進数で表すには、基本的に3つの方法があります。2の補数、1の補数、および符号の大きさです。(二年生は昔、ドードー鳥の道を行きました)
1の補数と符号の大きさには2つのゼロ値+0と-0があり、それぞれ一意の表現を持っています。2の補数には、1つのゼロ値と1つの表現しかありません。
これで、Nビットのフィールドは2 ^ Nの値をエンコードできます。2の補数で1を減算すると、2 ^ N-1 = 2 ^(N-1)+ 2 ^(N-1)+ 1になります。ゼロの表現はすべてゼロビットであり、+符号はゼロであるため、符号ビットが1に設定された非ゼロ表現がもう1つあります。
これは、2の補数が-(2 ^(N-1)).. +(2 ^(N-1)-1)の範囲の値を表すという非常に長い説明です。
整数デジタル信号処理計算を行う場合、実際には1の補数は2の補数よりも優れています。1の補数演算は、本質的にゼロに切り捨てられます。2の補数は-無限大に切り捨てられます。私はこれをハードな方法で学びました...