int、double などの負の値が正の値よりも 1 つ多い理由を知りたいです。
質問する
326 次
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 つの選択肢があります。
- 8 つの位置を整数
-1
to-7
および特別な値にマップします-0
。これは、数値の 1 の補数および符号と大きさの表現で使用されます。 - 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 に答える