私のコンパイラで int が 16 ビットの場合、範囲は -32768 から 32767 (2 の補数のマシン) です。
負の数に1つの余分な数がある理由を知りたい. つまり、正の数は 32767 になりますが、負の数はもう 1 つ、つまり 32768 になります。
-32768 は 2 の補数 m/c でどのように表されますか?
私のコンパイラで int が 16 ビットの場合、範囲は -32768 から 32767 (2 の補数のマシン) です。
負の数に1つの余分な数がある理由を知りたい. つまり、正の数は 32767 になりますが、負の数はもう 1 つ、つまり 32768 になります。
-32768 は 2 の補数 m/c でどのように表されますか?
16 ビットでは、pow(2,16) (2 の 16 乗) のさまざまな組み合わせを適合させて、65536 の数値を表すことができます。ゼロはネイティブで 000...000 として表現するのが最適であり、「2 の補数」システムの正の数は通常読み取り可能であると判断されました (それらは、0000 0000 0000 0101 = 5 10 進数などのような、いわゆる「自然な 2 進数」表現と同じです)。 .
2 の補数の負の数は 1111 1111 1111 1111 で始まり、-1 を表します。997、998、999 と続くカウンター ダイヤルと考えてみてください。突然 1000 を表す必要があるときに、オーバーフローして 000 を示します。ここでも原理は同じですが、方向は逆です。...000 から...111へ。-2 は 1111....1110 などで表されます。
2 の補数で可能な最小の数は、先頭が 1 で残りの桁が 0 になります。
シンプルで現実的な答えを探しているなら:
偏見はありません。正と負の側には同数の数値があり、正の数値は 0 から始まり、負の数値は -1 から始まるため、1 の差になります。:)
それを考える別の方法は、1 ビットの符号付き変数を作成することです。符号付きとは、負の数が存在する必要があり、もちろん正の数が存在することを意味します。では、プラスとマイナスが 1 つずつある場合、どの 2 つの数字を思い浮かべますか? では、2 ビットにしましょう。プラスとマイナスの 2 つは何ですか? 本当に秘密は、最後のビットが負を表していることです。
0 を負の数と見なしたい場合は、余分な作業が必要です。負の 0 を持つのはもったいないでしょう。
「偏見」は特にありません。最上位ビットが設定されている場合、数値は負です。「正の数値スペース」(つまり、MSB が設定されていない) の場合、1 ~ 32767 と同様に、ゼロがあるため、32768 が明らかに不足しています。
-32768 は 0b1000000000000000 で表されます。リンクテキストを見る
負のゼロはありません。(-0)。偏見のように見えるのはそのためです。最後のビットが設定されている場合、実際には負と見なされます。正と負の両方の範囲で設定できる 1 バイトには、さらに 7 ビットがあります。