例如,如果n=9
,那么 9 个二进制数字(位)可以表示多少个不同的值?
我的想法是,如果我将这 9 位中的每一个都设置为 1,我将使这 9 位能够表示的最大数字成为可能。因此,最高值是十进制1 1111 1111
中相等的值。511
因此,我得出结论,9 位二进制可以表示 511 个不同的值。
我的思维过程正确吗?如果没有,有人可以解释一下我错过了什么吗?我如何将其概括为n
位?
2 9 = 512 个值,因为这就是您可以拥有的 0 和 1 组合的数量。
然而,这些值代表什么取决于您使用的系统。如果它是无符号整数,您将拥有:
000000000 = 0 (min)
000000001 = 1
...
111111110 = 510
111111111 = 511 (max)
在二进制补码(通常用于表示二进制整数)中,您将拥有:
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 到 2 k -1有
符号:-2 k-1到 2 k-1 -1
你缺少什么:零是一个值
解决它的更好方法是从小处着手。
让我们从 1 位开始。可以是1
或0
。那是2个值,或10
二进制。
现在是 2 位,可以是00
, 01
,10
或者11
那是 4 个值,或者100
是二进制的……看到模式了吗?
好的,因为它已经“泄露”了:你漏掉了零,所以正确答案是512
(511 是最大的,但它是 0 到 511,而不是 1 到 511)。
顺便说一句,一个好的后续练习将概括这一点:
How many different values can be represented in n binary digits (bits)?
不想给你答案,这里是逻辑。
每个数字都有 2 个可能的值。你有 9 个。
就像在 base 10 中,你有 10 个不同的数字值说你有 2 个(从 0 到 99):0 到 99 有 100 个数字。如果你做计算你有一个指数函数
base^numberOfDigits:
10^2 = 100 ;
2^9 = 512
有一种更简单的方法来考虑这一点。从 1 位开始。这显然可以表示 2 个值(0 或 1)。当我们添加一点时会发生什么?我们现在可以表示两倍的值:我们之前可以表示的值附加一个 0 和我们之前可以表示的值附加一个 1。
所以我们可以用 n 位表示的值的数量只是 2^n(2 的 n 次方)
您缺少的是正在使用哪种编码方案。有不同的方法来编码二进制数。查看带符号的数字表示。对于 9 位,可以表示的数字的范围和数量将根据所使用的系统而有所不同。