論理的な観点から:署名された表現で
境界
あなたが5ビットを有するので、32の異なる組み合わせが存在します。つまり、5つの異なる32個の数字を作ることができます。符号なし整数の場合、5ビットに0〜31の整数を格納するのが理にかなっています。
しかし、これは約符号なし整数です。意味:負の数を表す方法も見つけなければなりません。意味:数字の値だけでなく、記号(+または - )も保存する必要があります。使用される表現は2の補数であり、どこでも学んだものです(おそらく他にも存在しますが、私はそれらを知らない)。この表現では、符号は第1のビットによって与えられる。つまり、2の補数表現では、正の数は0から始まり、負の数は1から始まります。
ここで問題が発生します。0は正数か負の数ですか?与えられた数字ビット(5:00000と10000)に対して0を2つの方法で表すことができます。すなわち、もう1つの数字を入れるスペースを失います。どのように決定したのか分かりませんが、実際は0が正数です。任意のビット数、符号付きまたは符号なしの場合、0は0のみで表されます。
グレートです。これは最初の質問に対する答えを与えます:2の補数で表される10進数の上限は何ですか?最初のビットは符号のためであることがわかります。したがって、表現できるすべての数字は4ビットで構成する必要があります。 16ビットの4ビット文字列を持つことができ、0はその1つで、上限は15です。
ここで、負の数の場合、これは簡単になります。私たちはすでに32ビットのうち16ビットを5ビットで満たしています。 16去った。また、0はすでに表現されているので、それを含める必要はありません。次に、0:-1の直前の数字から開始します。 -1から始まる16個の数字があるので、5ビットで表現できる最も小さい符号付き整数は-16です。
さらに一般的には、n
ビットでは、2^n
を表すことができます。符号付き整数では、半分が正であり、半分が負である。すなわち、我々は2^(n-1)
の正の数と2^(n-1)
の負の数を持っています。我々が知っているように0は正と考えられている、我々はn
ビットで表すことができる最大の符号付き整数は2^(n-1) - 1
あり、最低は今は5で表すことができる番号を知っている-2^(n-1)
2の補数表現
あります問題は、私たちがそれらをどのように表しているかを知ることです。
すでに、最初のビットに符号が表示されていて、0が正と見なされています。正の数の場合は、符号なし整数の場合と同じように動作します。00000は0、00001は1、00010は2などです。01111までは15です。これは正の符号付き整数に対して停止します。私たちが持っていた16の値。
負の符号付き整数の場合、これは異なります。同じ表現(10001が-1、10010が-2、...)を維持すると、11111は-15になり、10000は帰属しません。それが-16だと言うこともできますが、負の整数で作業するたびにこの特定のケースをチェックする必要があります。さらに、これはバイナリ操作のすべてを混乱させます。 10000が-1、10001が-2、10010が-3などであると判断することもできますが、バイナリ操作のすべてを駄目にすることもあります。
2の補数は次のように動作します。符号付き整数10011があり、10進数が何であるかを知りたいとしましょう。
- フリップすべてのビット:10011 - >
- 01100追加1:01100 - > 01101
- 符号なし整数として読む:01101 = 0 * 2^4 + 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 13。
10011は-13を表す。この表現は、両方の方法で動作するため、非常に便利です。 -7をバイナリ符号付き整数として表現する方法は?
> 11001そして、それはそれだ - 11000:> 11000
1を追加 - 00111:すべてのビットが00111.
- フリップである7のバイナリ表現で開始! 5ビットでは、-7が11001で表されます。
私はそれをカバーしませんが、2の補数の別の大きな利点は、追加が同じように機能することです。つまり、2つの2進数を追加するときは、符号付きか符号なしかを気にする必要はありませんが、これは同じアルゴリズムです。
これで、質問に答えることができますが、もっと重要なことは答えを理解することができるはずです。
このトピックは、2の補足を理解するのに最適です。Why is two's complement used to represent negative numbers?
非常に良い。示唆、 "すべてのビットをシフトする"は、左または右シフト操作と混同する可能性があります。おそらくフリップ、またはウィキペディアは反転を使用します。 – foo