35

nビット整数の最大値は 2 n -1 です。なぜ「マイナス1」があるのですか?最大値が 2 nではないのはなぜですか?

4

12 に答える 12

73

これ-1は、整数は 0 から始まるためですが、カウントは 1 から始まります。

したがって、2^32-1は32 ビットの符号なし整数 (2 進数で 32 桁)の最大値です。可能な値2^32の数です。

理由を簡単にするために、10 進数を見てください。10^2-12 桁の 10 進数 (99) の最大値です。人間の直感的な数え方は 1 から始まりますが、整数は 0 ベースなので、10^2値の数 (100) です。

于 2011-04-24T15:54:29.583 に答える
28

2^32バイナリで:

1 00000000 00000000 00000000 00000000

2^32 - 1バイナリで:

11111111 11111111 11111111 11111111

ご覧のとおり、はビットを2^32取り、 はビット整数の最大値です。332^32 - 132

ここで「1 つずつずれている」ように見えるエラーの理由は、最下位ビットが 2 ではなく 1 を表しているためです。したがって、最初のビットは実際2^0には 、2 番目のビットは2^1などです...

于 2011-04-24T16:18:03.583 に答える
14

バイナリの2 32は、1 の後に 32 個のゼロが続き、合計33ビットになります。これは 32 ビットの int 値には収まりません。

于 2011-04-24T15:54:46.817 に答える
13

ほとんどのプログラミング言語では、0数字です。

于 2011-04-24T15:51:50.377 に答える
6

0 から N までの数字は N ではなく、N+1 です。これは大多数の人には明らかではなく、その結果、多くのプログラムにバグがあります。

于 2011-04-24T15:54:30.860 に答える
4

プログラミングを始めたばかりの場合は、符号付き数値表現に関するこの wiki 記事をご覧になることをお勧めします。

ビセンテが述べたように、1 を引く理由0は、含まれる数でもあるからです。簡単な例として、3 ビットで、次の非負の整数を表すことができます。

0 : 000
1 : 001
2 : 010
3 : 011
4 : 100
5 : 101
6 : 110
7 : 111

それを超えるものは、3 桁以上が必要です。したがって、表現できる最大数は 2^3-1=7 です。したがって、これを任意に拡張nして、範囲内の整数を表現できると言うことができます[0,2^n -1]。これで、その記事を読んで、さまざまな形式や負の整数の表現などを理解できます。

于 2011-04-24T15:59:07.273 に答える
4

コンピューティングでは、数字は から始まるから0です。たとえば、アドレス行が 32 行 (2 32アドレス指定可能バイト) ある場合、それらは[0, 2^32).

于 2011-04-24T15:52:24.527 に答える
3

Why do we have the "minus 1"?

Just answer the question: What is the maximum value of an 1-bit integer?

One bit integer can store only two (21) values: 0 and 1. Last value is 12 = 110

Two bit integer can store only four (22) values: 00, 01, 10 and 11. Last value is 112 = 310

Thus, when integer can stores N, values last value will be N-1 because counting starts from zero.

n bit integer can store 2n values. Where last will be 2n-1

Example: One byte can store 28 (256) values. Where first is 0 and last is 255

Why isn't the maximum just 2n?

Because counting starts from zero. Look at first value for any n bit integer.
For example byte: 00000000

This would be very confusing if:
00000001 means 2
00000000 means 1

would not? ;-)

于 2018-04-27T17:12:55.740 に答える
3

2桁の数字に収まる最大の値は? 明らかに後者です。したがって、最大のn桁数は何かと尋ねると、10 n -1 となります。しかし、なぜ「-1」があるのですか?簡単に言えば、2 桁の数字で 0 を 00 として表すこともできるからです (しかし、誰もが 0 と書くだけです)。

10を任意の基数に置き換えてみましょうb。与えられた基数 に対して、表現できるb最大桁数は b n -1 です。32 ビット ( ) 基数 2 ( ) の数値を使用すると、表現できる最大値は 2 32 -1 であることがわかります。nn = 32b = 2


それについて考える別の方法は、より小さな数を使用することです。1 ビットの数値があるとします。それが表すことができる最大の値は 2 1または 2 1 -1 でしょうか?

于 2014-05-25T03:30:13.283 に答える
2

ほとんどのプログラミング言語では、整数は符号付きの値です( 2 の補数を参照)。

たとえば、Java と .NET の整数では、左端のバイトは符号用に予約されています。

  • 0=> 正またはゼロの数値
  • 1=> 負の数

この場合、 numberの最大値は 2 3132-bitに制限されます。加えて 2 31 - 1 が得られます。-1

-1が現れるのはなぜ?

符号なしバイト (8 ビット) を使用した、より単純な例を見てください。

  1  1  1  1  1  1  1  1
128 64 32 16  8  4  2  1  <-- the most right bit cannot represent 2
--- --------------------
128 + 127 = 255 

他の人が指摘したように、値のために、最も右のビットは1ではなくの最大値を持つことができます。20/1

Int32.MaxValue = 2147483647 (.NET)
于 2014-03-07T18:36:36.620 に答える
0

コンピューティングの分野では、0から数え始めます。

于 2011-04-24T16:09:00.597 に答える