nビット整数の最大値は 2 n -1 です。なぜ「マイナス1」があるのですか?最大値が 2 nではないのはなぜですか?
12 に答える
これ-1は、整数は 0 から始まるためですが、カウントは 1 から始まります。
したがって、2^32-1は32 ビットの符号なし整数 (2 進数で 32 桁)の最大値です。可能な値2^32の数です。
理由を簡単にするために、10 進数を見てください。10^2-12 桁の 10 進数 (99) の最大値です。人間の直感的な数え方は 1 から始まりますが、整数は 0 ベースなので、10^2値の数 (100) です。
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などです...
バイナリの2 32は、1 の後に 32 個のゼロが続き、合計33ビットになります。これは 32 ビットの int 値には収まりません。
ほとんどのプログラミング言語では、も0数字です。
0 から N までの数字は N ではなく、N+1 です。これは大多数の人には明らかではなく、その結果、多くのプログラムにバグがあります。
プログラミングを始めたばかりの場合は、符号付き数値表現に関するこの 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]。これで、その記事を読んで、さまざまな形式や負の整数の表現などを理解できます。
コンピューティングでは、数字は から始まるから0です。たとえば、アドレス行が 32 行 (2 32アドレス指定可能バイト) ある場合、それらは[0, 2^32).
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? ;-)
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 でしょうか?
ほとんどのプログラミング言語では、整数は符号付きの値です( 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)
コンピューティングの分野では、0から数え始めます。