たとえば、n=9
、その後、9つの2進数(ビット)でいくつの異なる値を表すことができますか?
私の考えでは、これらの9ビットのそれぞれを1に設定すると、それらの9桁が表すことができる最大の数字を作成できると考えています。したがって、最高値は1 1111 1111
これは511
10進数。したがって、バイナリの9桁は511の異なる値を表すことができると結論付けます。
私の思考プロセスは正しいですか?そうでない場合、誰かが私に欠けているものを親切に説明できますか? n
ビットに一般化するにはどうすればよいですか?
29 = 512の値。これは、ゼロと1の組み合わせがいくつあるためです。
ただし、これらの値が表すものは、使用しているシステムによって異なります。符号なし整数の場合、次のようになります。
000000000 = 0 (min)
000000001 = 1
...
111111110 = 510
111111111 = 511 (max)
2の補数 (整数をバイナリで表現するために一般的に使用されます)には、次のものがあります。
000000000 = 0
000000001 = 1
...
011111110 = 254
011111111 = 255 (max)
100000000 = -256 (min) <- yay integer overflow
100000001 = -255
...
111111110 = -2
111111111 = -1
一般に、kビットで2を表すことができますk 値。それらの範囲は、使用しているシステムによって異なります。
符号なし:0〜2k-1
署名済み:-2k-1 2へk-1-1
不足しているもの:ゼロは値です
それを解決するより良い方法は、小さく始めることです。
1ビットから始めましょう。 1
または 0
。それは2つの値、または10
バイナリ。
現在は2ビットで、00
、01
、10
または 11
それは4つの値、または100
バイナリで...パターンを参照してください?
さて、すでに「漏れ」ているので、ゼロが欠落しているので、正しい答えは512
(511は最大のものですが、1〜511ではなく0〜511です)。
ところで、良いフォローアップの練習はこれを一般化することです:
How many different values can be represented in n binary digits (bits)?
ここで答えを与えたくないのはロジックです。
各桁に2つの可能な値があります。あなたはそれらの9を持っています。
数字で10個の異なる値を持つベース10のように、2つ(0から99になる)があると言います:0から99は100個の数字になります。計算を行うと、指数関数があります
base^numberOfDigits:
10^2 = 100 ;
2^9 = 512
これについて考える簡単な方法があります。 1ビットから始めます。これは明らかに2つの値(0または1)を表すことができます。少し追加するとどうなりますか? 2倍の値を表現できるようになりました。0を追加して前に表現できる値と、1を追加して前に表現できる値です。
したがって、nビットで表現できる値の数は2 ^ n(2のn乗)です。
不足しているのは、どのエンコード方式が使用されているかです。 2進数をエンコードするにはさまざまな方法があります。符号付き数値表現を調べます。 9ビットの場合、表現できる数値の範囲と量は、使用するシステムによって異なります。