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 位开始。可以是1
或0
。这是 2 个值,或二进制的 10
。
现在是 2 位,可以是 00
、01
、10
或 11
,这是 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