n
- bit整数の最大値は2ですん-1。なぜ「マイナス1」があるのですか?なぜ最大値が2でないのですかん?
-1
は、整数は0から始まりますが、カウントは1から始まるためです。
そう、 2^32-1
は、32ビットの符号なし整数(32桁の2進数)の最大値です。 2^32
は可能な値の数です。
理由を簡単にするために、10進数を見てください。 10^2-1
は2桁の10進数の最大値(99)です。私たちの直感的な人間のカウントは1から始まりますが、整数は0ベースなので、10^2
は値の数(100)です。
バイナリの2^32
:
1 00000000 00000000 00000000 00000000
バイナリの2^32 - 1
:
11111111 11111111 11111111 11111111
ご覧のとおり、2^32
は33
ビットを使用しますが、2^32 - 1
は32
ビット整数の最大値です。
ここで「オフバイワン」のように見えるエラーの理由は、最下位ビットが2ではなく1を表すためです。したがって、firstビットは実際には2^0
、secondですビットは2^1
などです...
232 バイナリでは、1つの後に32個のゼロが続き、合計でビットになります。これは、32ビットのint値には適合しません。
ほとんどのプログラミング言語では、0
は数値tooです。
0からNまでの数字はNではありません。N+ 1です。これは大多数の人々には明らかではなく、その結果、多くのプログラムにはバグがあります。
コンピューティングでは、数値は0
から始まるためです。たとえば、32行の住所行がある場合(232 アドレス可能なバイト)、[0, 2^32)
の範囲になります。
プログラミングを始めたばかりの場合は、このwikiの記事 符号付き数値表現 をご覧になることをお勧めします。
Vicenteが述べたように、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]
の範囲の整数を表現できると言えます。これで、その記事を読んでさまざまな形式を理解し、負の整数を表すことができます。
2桁の数値に当てはまる最大の値は何ですかと尋ねると、10だと思いますか2 (100)または102-1(99)?明らかに後者です。したがって、n
の最大の桁数を尋ねると、10になります。ん-1。しかし、なぜ「-1」があるのでしょうか。簡単に言うと、2桁の数値で0を00として表すこともできるからです(ただし、誰もが0と書くだけです)。
10
を任意のベースb
に置き換えましょう。したがって、与えられた基数b
に対して、表現できる最大のn
桁の数値はbん-1。 32ビット(n = 32
)の基数2(b = 2
)の数値を使用すると、2を表すことができる最大値がわかります。32-1。
それについて考えるもう1つの方法は、小さい数値を使用することです。 1ビットの数値があるとします。それが表すことができる最大の値は2だと教えていただけますか1 または21-1?
ほとんどのプログラミング言語では整数は符号付きの値です( 2の補数 を参照)。
たとえば、Javaおよび.NET整数では、左端のバイトが符号用に予約されています。
0
=>正またはゼロの数値1
=>負の数次に、32-bit
の最大値は2^31
によって制限されます。そして-1
を追加すると、2^31 - 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
の値により、最も正しいビットの最大値は2
ではなく0/1
になる可能性があります。
Int32.MaxValue = 2147483647 (.NET)
0も表されているためです。実際に表すことができる数値の量はnビットで2 ^ nですが、カウントは0から開始する必要があるため、つまりすべてのビットが0に設定されているため、最大数は2 ^ n-1です。
1ビットの場合:0、1
2ビットの場合:0、1、2、3
3ビットの場合:0、1、2、3、4、5、6、7
等々。
なぜ「マイナス1」があるのですか?
ちょうど質問に答えてください:1ビット整数の最大値は何ですか?
1ビット整数はのみ保存できます2(21)値:0
および1
。最後の値は1です2 = 110
2ビット整数は4(22)値:00
、01
、10
および11
。最後の値は11です2 = 10
したがって、整数がN
を格納できる場合、カウントはzeroから始まるため、最後の値はN-1
になります。
n
ビット整数は2
を格納できますn
値。最後は2
になりますん-1
例:1バイトで2
を格納できます8 (256)値。最初は0
、最後は255
です。
最大値が2nでないのはなぜですか?
カウントはゼロから始まるからです。 n
ビット整数の最初の値を確認します。
バイトの例:00000000
次の場合、これは非常に混乱します。00000001
は2
を意味します00000000
は1
を意味します
しませんか? ;-)
コンピューティングの分野では、0から数え始めます。