0

私のコンパイラで int が 16 ビットの場合、範囲は -32768 から 32767 (2 の補数のマシン) です。
負の数に1つの余分な数がある理由を知りたい. つまり、正の数は 32767 になりますが、負の数はもう 1 つ、つまり 32768 になります。

-32768 は 2 の補数 m/c でどのように表されますか?

4

5 に答える 5

6

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 になります。

于 2010-07-03T08:36:54.557 に答える
3

シンプルで現実的な答えを探しているなら:

偏見はありません。正と負の側には同数の数値があり、正の数値は 0 から始まり、負の数値は -1 から始まるため、1 の差になります。:)

于 2010-07-03T08:44:47.987 に答える
1

それを考える別の方法は、1 ビットの符号付き変数を作成することです。符号付きとは、負の数が存在する必要があり、もちろん正の数が存在することを意味します。では、プラスとマイナスが 1 つずつある場合、どの 2 つの数字を思い浮かべますか? では、2 ビットにしましょう。プラスとマイナスの 2 つは何ですか? 本当に秘密は、最後のビットが負を表していることです。

0 を負の数と見なしたい場合は、余分な作業が必要です。負の 0 を持つのはもったいないでしょう。

于 2010-07-03T09:15:39.880 に答える
1

「偏見」は特にありません。最上位ビットが設定されている場合、数値は負です。「正の数値スペース」(つまり、MSB が設定されていない) の場合、1 ~ 32767 と同様に、ゼロがあるため、32768 が明らかに不足しています。

-32768 は 0b1000000000000000 で表されます。リンクテキストを見る

于 2010-07-03T08:35:15.997 に答える
1

負のゼロはありません。(-0)。偏見のように見えるのはそのためです。最後のビットが設定されている場合、実際には負と見なされます。正と負の両方の範囲で設定できる 1 バイトには、さらに 7 ビットがあります。

于 2010-07-03T08:49:52.063 に答える