web-dev-qa-db-ja.com

nビットで表現できる値はいくつですか?

たとえば、n=9、その後、9つの2進数(ビット)でいくつの異なる値を表すことができますか?

私の考えでは、これらの9ビットのそれぞれを1に設定すると、それらの9桁が表すことができる最大の数字を作成できると考えています。したがって、最高値は1 1111 1111これは511 10進数。したがって、バイナリの9桁は511の異なる値を表すことができると結論付けます。

私の思考プロセスは正しいですか?そうでない場合、誰かが私に欠けているものを親切に説明できますか? nビットに一般化するにはどうすればよいですか?

40
Sean

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

51

不足しているもの:ゼロは値です

10
SamStephens

それを解決するより良い方法は、小さく始めることです。

1ビットから始めましょう。 1 または 0。それは2つの値、または10バイナリ。

現在は2ビットで、000110 または 11それは4つの値、または100バイナリで...パターンを参照してください?

2
Randy the Dev

さて、すでに「漏れ」ているので、ゼロが欠落しているので、正しい答えは512(511は最大のものですが、1〜511ではなく0〜511です)。

ところで、良いフォローアップの練習はこれを一般化することです:

How many different values can be represented in n binary digits (bits)?
1
schnaader

ここで答えを与えたくないのはロジックです。

各桁に2つの可能な値があります。あなたはそれらの9を持っています。

数字で10個の異なる値を持つベース10のように、2つ(0から99になる)があると言います:0から99は100個の数字になります。計算を行うと、指数関数があります

base^numberOfDigits:
10^2 = 100 ;
2^9 = 512
1
pastjean

これについて考える簡単な方法があります。 1ビットから始めます。これは明らかに2つの値(0または1)を表すことができます。少し追加するとどうなりますか? 2倍の値を表現できるようになりました。0を追加して前に表現できる値と、1を追加して前に表現できる値です。

したがって、nビットで表現できる値の数は2 ^ n(2のn乗)です。

1
dave

不足しているのは、どのエンコード方式が使用されているかです。 2進数をエンコードするにはさまざまな方法があります。符号付き数値表現を調べます。 9ビットの場合、表現できる数値の範囲と量は、使用するシステムによって異なります。

1