编码0到31(含)范围内的整数需要多少位?

时间:2015-02-11 03:10:47

标签: encoding bits

有人可以解释如何处理这样的问题吗?

3 个答案:

答案 0 :(得分:2)

“位”是“二进制数字”。这意味着(根据定义),它们是base-2数字系统中的数字。因此,不是您习惯使用的base-10系统(每列中的数字为0-9),而是每列只有两个值(0或1)。

base-10系统中的每一列对应10的幂 - 例如,123是1 x 10 ^ 2 + 2 * 10 ^ 1 + 3 * 10 ^ 0.

二进制以相同的方式工作,除了基数2而不是10.因此10011是1 * 2 ^ 4 + 0 * 2 ^ 3 + 0 * 2 ^ 2 + 1 * 2 ^ 1 + 1 * 2 ^ 0其中十进制是19。

现在,要确定需要多少位(即数字)来表示给定的数字范围,您可以从一位开始并继续添加另一位,直到您有足够的空间。例如,0-1将适合单个位; 50将需要至少6位,因为1仅对0-1足够,2位仅足够0-3,3位仅足够0-7等等,直到你得到5位仅足够0-31,但6绰绰有余。

每个附加位将可以由多个位表示的可能数量的数量加倍(正如添加另一个基数为10的数字可以表示数字的十倍)。 0位可以表示0个数字。 1位可以表示2个数字(0-1)。 2位可以表示2 * 2个数字。 3位可以表示2 * 2 * 2 = 2 ^ 3个数字。 4位可以表示2 ^ 4个数字。等等。

唯一需要考虑的棘手问题是可表示数字的数量与这些表示所对应的实际范围之间的区别。如果你有4比特,则有2 ^ 4个不同的比特组合(0000到1111)。但是如果你认为0000代表零,那么你可以容纳四位的最大数字是15(不是16,因为即使有十六种不同的可能表示,范围[0-15]包含十六个不同的数字(计算它们!)因此16本身将是第17个数字,因此需要5位来表示)。

我希望这能澄清事情!

答案 1 :(得分:0)

在二进制文件中,最好考虑一列1和0。 每列代表2提升到一些功率。你从右到左阅读,最右边总是2 ^ 0电源,然后是2 ^ 1等等。

当2 ^ 0设置为0时,您将获得值0。 当2 ^ 0设置为1时,您得到的值为1(任何提升到第0次幂的值都是1.)

将二进制1或0视为打开或关闭。 您可以通过各自的输出对“ons”求和。 每列或0/1值代表一点。

000000 = 0
000001 = 1
000010 = 2
000011 = 3
000100 = 4
000101 = 5
000110 = 6
000111 = 7

等等。由于2 ^ 5 = 32,第6列中需要1,而不是第5列。因为我们从零指数开始。

100000 = 32, so 6 bits, but it was only inclusive of 31, so we have to go down one value.
011111 = 31, so 5 bits, are absolutely necessary for representing the number 31.

答案 2 :(得分:0)

你需要5位。每个位可以具有两个值中的一个,并且5位的组合数是2 ^ 5。通过考虑基本情况,您可以证明2 ^ n是n位组合的数量:

1位=两种可能的选择= 2 ^ 1

然后是诱导步骤。

如果我们有N位,那么我们可以将其分为1位加n-1位。如果公式为真,则存在最后n-1位的2 ^(n-1)个组合,并且对于这些组合中的每一个,第一位可以处于两个位置之一。因此,对于N比特,存在2 *(2 ^(n-1))个组合,其等于2 ^(n-1 + 1),其等于2 ^ n。

这是归纳证明。第一步很简单(n = 1),然后第二步告诉我们如果n = 1则为真,则n = 2,然后n = 3,然后n = 4,等等。