7

int、double などの負の値が正の値よりも 1 つ多い理由を知りたいです。

4

3 に答える 3

18

一言で言えば: 0 はどこかに収まる必要があります。それはプラスにあるため、マイナスよりも 1 少なくなります。

例: マイナスに 5 スロット、プラスに 5 スロット、マイナスは -1 から -5 を取得し、プラスは 0 から 4 を取得します。

  • @chrisリンクを読むことを忘れないでください:)

@WhozCraig が指摘したように、これは符号付き 2 進数の 2 の補数表現を使用するアーキテクチャでのみ有効です。

于 2013-01-12T07:25:47.583 に答える
3

4 ビットを使用する整数データ型があるとします。それらを使用して、16 の可能な符号付き整数を表すことができます。正の整数値が範囲の前半に割り当てられます。

0000b = 0
0001b = 1
0010b = 2
0011b = 3
0100b = 4
0101b = 5
0110b = 6
0111b = 7

後半については、次の 2 つの選択肢があります。

  1. 8 つの位置を整数-1to-7および特別な値にマップします-0。これは、数値の 1 の補数および符号と大きさの表現で使用されます。
  2. 8 つの位置を整数-1にマッピングし-8ます。これは、ほとんどのプログラマーがよく知っている (そしてあなたが話しているもの) 2 の補数表現で使用されます。

負の数は次のようにマッピングされます。

1000b = -8
1001b = -7
1010b = -6
1011b = -5
1100b = -4
1101b = -3
1110b = -2
1111b = -1

これは意味をなさないかもしれませんが、このマッピングにより、算術演算を簡単に実行できます。


これは float には適用されません。それらは異なって表されます。ほとんどの浮動小数点表現は、+0/-0 の両側で同じ範囲を持ちます。

于 2013-01-12T22:54:03.493 に答える
0

C の場合、2 の補数演算ハードウェア (正よりも負の方が 1 大きい) を備えたマシンで実行することは保証されていません。実際には、おそらくそのようになるでしょう。

于 2013-01-12T07:33:43.847 に答える