【问题标题】:Java: How many integers can a byte represent?Java:一个字节可以表示多少个整数?
【发布时间】:2025-12-22 15:35:12
【问题描述】:

1 或 0 是一位。一个字节是8位。

为什么一个字节可以表示从 -128 到 127(含)的任何整数,但不能表示从 0 到 255 的任何整数?

因为 11,111,111 在二进制中是 255,而你包括 0,那么你可以在一个字节中表示 256 个整数。

另外,我的书 auhor 只是告诉我它是 256,因为 2 到 8 次方。好的,这是有道理的,但是如何?数学是什么?

【问题讨论】:

  • 您了解有符号数学的工作原理,尤其是二进制补码吗?
  • 什么是有符号数学?像 2 和 -2?
  • 有 256 个唯一的 8 位值。 “字节”可以表示从 0 到 255 的整数,或单个 ASCII 字符,或任何其他 256 个字符。 Java 语言设计者选择使用整数 -128 到 127 作为 byte 数据类型。
  • 8 位给出 256 个不同的值;剩下的就是约定俗成的事情了。

标签: java


【解决方案1】:

每个位可以取两个值,0 和 1。

由于您有 8 位,并且每个位都可以取独立于其他位的值,因此 8 位变量可以取 2*2*2*2*2*2*2*2 = 2**8 = 256 个不同的值价值观。

由程序员决定这些值是否来自 [-128; 127] 范围,或从 [0; 255] 范围(都包含 256 个不同的值)。我们称前者为“有符号 8 位整数”,后者为“无符号 8 位整数”。

带符号的值通常使用two's complement 表示。

Java 的 byte 是 8 位有符号二进制补码整数的示例

但为什么是 2 到 8 次方?这就是关键问题。而不是添加 128、64、32、16、8、4、2、1

您列出的这些数字都是 2 的幂:128=2**7, 64=2**6, 32=2**5, ..., 1=2**0。很容易用代数方式证明,当您将它们相加时,您会得到 2 减一的下一个幂:128+64+32+16+8+4+2+1=256-1

【讨论】:

  • 但为什么是 2 到 8 次方?这就是关键问题。无需添加 128, 64, 32, 16, 8, 4, 2, 1
  • 是排列组合吗?
  • @user132522:另外,128+64+32+16+8+4+2+1 256-1(容易证明)。
  • @user132522 正如@NPE 刚才所说,如果您将 2 的所有幂相加,您将得到下一个 2 的幂减 1:sum_{i = 0}^{n - 1} 2^i = 2^n - 1
【解决方案2】:

因为 byte 存储有符号值(正数和负数)。如果从 -128 数到 +127,则为 256 个值。 Java 只提供有符号字节值。

另外,它是 2^8,因为一个字节由 8 位组成。每个位可以是“0”或“1”,因此每个位有两个可能的值 (2^8)。

1 bit -> 2^1 = 2 values 
2 bits -> 2^2 = 4 values
8 bits -> 2^8 = 256 values
n bits -> 2^n.

【讨论】:

    【解决方案3】:

    您可以通过此链接https://en.wikipedia.org/wiki/Signed_number_representations查看一个的补码和二进制的补码以更好地理解

    【讨论】:

      【解决方案4】:

      这样想:每增加一个数字,可能的输出数量就会增加一倍。如果您有 1 个数字,则有 2 个可能的输出。 2 位数字为您提供 4 种可能的输出。 3 位数字为您提供 8 种可能的输出。因此,二进制数有2^n 可能的值(其中n 是位数)。

      顺便说一句,这可以推广到其他类型的基数 - 公式是 b^n(其中 b 是基数,n 是位数)。例如,一个 3 位以 10 为基数的数字有 10^3 个可能的值。显然,二进制只是基数 2;其他流行的基地是 8 和 16,但我们没有理由将其限制在此。我们可以做,例如,base 7 或 base 9 或 base 13 或类似的奇怪的东西,但很少这样做。 (选择基数 8 是因为它是 2 的倍数并且整除 24,这对于 24 位系统很方便;基数 16 对于 32 位和 64 位机器也很方便,原因类似——它比二进制,但更容易在它们之间转换)。

      正如其他人指出的那样,,实际上,一个字节有 256 个可能的值 - 只是您必须选择是否要在 -128 到 +127 或 0 的范围内到 255。

      【讨论】:

        最近更新 更多