n 位可以表示多少个值?

Posted

技术标签:

【中文标题】n 位可以表示多少个值?【英文标题】:How many values can be represented with n bits? 【发布时间】:2011-04-18 01:35:32 【问题描述】:

比如n=9,那么9个二进制数字(位)可以表示多少个不同的值?

我的想法是,如果我将这 9 位中的每一个都设置为 1,那么我将使这 9 位能够表示的最大数字成为可能。因此,最大值是1 1111 1111,它等于十进制的511。因此,我得出结论,9位二进制可以代表511个不同的值。

我的思维过程正确吗?如果没有,有人可以解释一下我错过了什么吗?如何将其推广到n bits?

【问题讨论】:

512。你忘记了 000000000。 +1 提出了一个很好的家庭作业问题。如果 Stack Overflow 上的所有作业问题都是这样,那将是一个更好的地方。 为什么关闭:(它与“特定时间”无关..... 例如2 pow 3 代表三个占位符(例如 000、001、010、100、101、110、111)的两种组合 (0,1)。如果您有五个位置的 8(八进制 0-7)组合,则可能的组合总数为8 战俘 5. 【参考方案1】:

29 = 512 个值,因为这是您可以拥有的 0 和 1 组合的数量。


然而,这些值代表什么取决于您使用的系统。如果它是一个无符号整数,您将拥有:

000000000 = 0 (min)
000000001 = 1
...
111111110 = 510
111111111 = 511 (max)

在two's complement(通常用于表示二进制整数)中,您将拥有:

000000000 = 0
000000001 = 1
...
011111110 = 254
011111111 = 255 (max)
100000000 = -256 (min) <- yay integer overflow
100000001 = -255
...
111111110 = -2
111111111 = -1

通常,使用 k 位可以表示 2k 个值。它们的范围取决于您使用的系统:

无符号:0 到 2k-1 签名:-2k-1 到 2k-1-1

【讨论】:

你提出了一个非常有趣的观点。我没有想到有符号和无符号整数。 但在任何情况下,不同值的数量始终是 2^k【参考方案2】:

你缺少什么:零是一个值

【讨论】:

【参考方案3】:

解决问题的更好方法是从小处着手。

让我们从 1 位开始。可以是10。这是 2 个值,或二进制的 10

现在是 2 位,可以是 00011011,这是 4 个值,或者是二进制的 100... 看到模式了吗?

【讨论】:

【参考方案4】:

好的,既然它已经“泄露”了:你漏掉了零,所以正确答案是512(511 是最大的,但它是 0 到 511,而不是 1 到 511)。

顺便说一句,一个很好的后续练习是概括这一点:

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

【讨论】:

感谢您解释我错过了 0 值。您改写问题的方式肯定会在将来对我有所帮助。【参考方案5】:

这里不想给你答案就是逻辑。

每个数字都有 2 个可能的值。你有 9 个。

就像在以 10 为基数的情况下,你有 10 个不同的数字值说你有 2 个(从 0 到 99):0 到 99 有 100 个数字。如果你做计算,你有一个指数函数

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

【讨论】:

【参考方案6】:

有一种更简单的方法来考虑这个问题。从 1 位开始。这显然可以表示 2 个值(0 或 1)。当我们添加一点时会发生什么?我们现在可以表示两倍的值:我们之前可以表示的值附加了 0,而我们之前可以表示的值附加了 1。

所以我们可以用 n 位表示的值的数量只是 2^n(2 的 n 次方)

【讨论】:

【参考方案7】:

您缺少的是正在使用的编码方案。有不同的方法来编码二进制数。查看带符号的数字表示。对于 9 位,可以表示的数字的范围和数量会因使用的系统而异。

【讨论】:

表示的数字范围会因编码而异,但无论使用何种编码,可表示的不同值的数量都保持不变 我刚刚在纸上计算出 3 位固定精度来检查自己。无符号和 2 的补码表示可以表示 8 个值。我计算有符号幅度和 1 的补码的 7 个值,因为这些系统具有正零和负零的表示。正负零也算吗? 对于 1 的恭维,正零和负零被视为两个不同的值。我不确定你所说的“有符号幅度”是什么意思,你能详细说明你的意思吗? @Lie:有人可能会说+0-0 是两个不同的基准,它们代表相同的。使用该术语,k 位序列中的数据数量始终为 2^k,但这些数据可能表示的值的数量小于或等于 2^k。 @Lie Ryan:en.wikipedia.org/wiki/… 我不知道(或忘记...)+0 和 -0 都被计算在内。以后我会记住的。谢谢。

以上是关于n 位可以表示多少个值?的主要内容,如果未能解决你的问题,请参考以下文章

c语言:输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n

[UE4]位与字节

Python-表示一列的每n个值

数据类型unsigned char表示范围(存储值的范围)是多少,为啥(写出计算过程)

Java中的基本数据类型

ipv6地址长度为多少位