【问题标题】:How many values can be represented with n bits?n 位可以表示多少个值?
【发布时间】:2022-01-04 03:47:14
【问题描述】:

比如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.

标签: binary bits


【解决方案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】:

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

【讨论】:

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

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

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

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

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

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

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

      【讨论】:

        【解决方案6】:

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

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

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

        【讨论】:

        • 感谢您解释我缺少 0 值。您改写问题的方式肯定会在将来对我有所帮助。
        【解决方案7】:

        你缺少什么:零是一个值

        【讨论】:

          猜你喜欢
          • 2018-12-07
          • 2021-01-19
          • 2017-10-12
          • 1970-01-01
          • 2015-05-20
          • 2015-03-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多