Menu
CoddyTech

字节(byte)是什么?

字节(byte)是由 8 个比特组成的数字数据单位,可以表示 256 个不同的值,范围从 0 到 255。在大多数计算机上,它是拥有独立地址的最小内存单位,文件大小也以字节为单位计算。

作者 Kevin Spektor, 联合创始人兼 CTO

更新于 2026年9月24日

128
64
32
16
8
4
2
1
十进制65
Hex41
ASCII 字符A
  • 48H
  • 69i
  • 20␣
  • F0 9F 98 80😀

4 个字符,7 个字节

字母 A 存储在你的电脑里时,是数字 65,而数字 65 是用八个比特存储的:01000001。这一组八个比特就是一个字节。内存地址按字节计数,文件大小按字节计数,编程语言里几乎每种数据类型的长度都是整数个字节。

为什么一个字节是 8 位

“byte”这个词是 Werner Buchholz 于 1956 年在参与 IBM Stretch 计算机项目时创造的。他特意用 y 来拼写,免得被误读为“bit”。早期计算机使用各种不同大小的分组,常见的是 6 位,足够表示大写字母和数字,却放不下小写字母。

IBM 在 1964 年发布的 System/360 采用了 8 位字节,整个行业随后跟进。八个比特能表示 256 个值,足以容纳大小写字母、数字、标点符号和控制码。8 还是 2 的幂,所以一个字节可以平均分成两个 4 位的半部分,每一半写成一位十六进制数字。网络标准在需要明确表示“恰好 8 位”时,至今仍使用“八位组”(octet)这个说法。

一个字节能存什么

一个字节有 256 种可能的模式,从 00000000 到 11111111。程序通常用以下几种标准方式来解读它:

  • 0 到 255 之间的无符号数;
  • -128 到 127 之间的有符号数;
  • 一个字符,比如 A(65)或 !(33);
  • 两位十六进制数字,从 00 到 FF。

Python 的 bytes 类型就是由这些值组成的序列,任何超出 0 到 255 的值都会被拒绝:

b'Hi!'
[72, 105, 33]
01001000 48
ValueError: bytes must be in range(0, 256)

并不是每个字符都能放进一个字节。UTF-8 是网络上最常用的编码,它用 1 个字节存储 128 个 ASCII 字符,其他字符则占 2 到 4 个字节:

A 1 bytes: [65] 41
é 2 bytes: [195, 169] c3a9
€ 3 bytes: [226, 130, 172] e282ac
😀 4 bytes: [240, 159, 152, 128] f09f9880

这就是为什么字符串的字符数和它的字节数可能不同。

比特与字节的区别

一个比特是单个 0 或 1,一个字节是 8 个比特。这两个单位很容易混淆,因为它们的符号只有大小写之分:

比特字节
是什么一位二进制数字8 个比特
可能的值2 个(0 或 1)256 个(0 到 255)
符号b(小写)B(大写)
通常用来衡量网速:Mbps、Gbps存储和文件大小:KB、MB、GB
示例100 Mbps 的宽带5 MB 的照片

要把比特换算成字节,就除以 8。100 Mbps 的宽带每秒最多传输 12.5 MB,所以用它下载一张 5 MB 的照片至少需要 0.4 秒。

KB、MB 和 GB

更大的单位有两套体系,正是两者之间的差距,让新硬盘在 Windows 里看起来比标签上写的小。

十进制(SI)字节数二进制(IEC)字节数
千字节(kB)1,000KiB1,024
兆字节(MB)1,000,000MiB1,048,576
吉字节(GB)1,000,000,000GiB1,073,741,824
太字节(TB)1,000,000,000,000TiB1,099,511,627,776

硬盘厂商、网速以及 macOS(从 2009 年的 10.6 版开始)使用十进制单位。内存容量和 Windows 使用二进制单位,但 Windows 把它们标为 KB、MB 和 GB。IEC 在 1998 年引入了 kibibyte、mebibyte 和 gibibyte 这些名称来消除混乱,不过很多程序至今仍未采用。

1.0 TB (decimal, used on the box)
931.3 GiB (binary, what Windows calls GB)
12.5 MB per second

空间并没有丢失。硬盘确实装得下包装盒上承诺的一万亿字节,只是 Windows 连续三次除以 1,024,而不是 1,000。

代码中的字节

内存中的每个值都占用整数个字节。在 C 中,sizeof 会报告这个数字。按定义,char 恰好是 1 个字节;在当前的 64 位 Linux、macOS 和 Windows 系统上,short 是 2 个字节,int 是 4 个,double 是 8 个。因此,一个包含 1,000 个 int 值的数组占用 4,000 个字节。

printf("%zu\n", sizeof(int));   /* prints 4 */

Java 的 byte 类型始终是有符号的,范围从 -128 到 127,所以像 200 这样的值放不进去:

byte b = (byte) 200;   // b is -56: the same 8 bits, read as signed

图片、压缩文件和网络数据包这类原始数据,都以字节数组的形式处理:Python 中是 bytes 和 bytearray,Java 中是 byte[],JavaScript 中是 Uint8Array。在 Python 中用 "rb" 模式打开文件,得到的是它的字节而不是文本。

哈希值和校验和也用字节来衡量。SHA-256 摘要是 32 个字节,所以打印出来是 64 个十六进制字符;CRC32 校验和是 4 个字节。哈希生成器可以为任意文本显示这两种值。

下一步学什么

想了解字节底下的单位,可以阅读比特是什么;想知道如何用字节检测损坏的文件,可以阅读校验和是什么。进制转换器能把任意字节在十进制、二进制和十六进制之间转换,C 语言数据类型指南列出了每种 C 类型占用的字节数。

常见问题

8 位的 11111111 叫什么?
八个比特就是一个字节,11111111 是所有位都为 1 的字节。按无符号数读取,它是 255,也就是一个字节能存的最大值,十六进制写作 FF。如果按补码表示的有符号字节读取,同样的比特表示 -1。
为什么 8 位等于 1 个字节?

8 是一个最终胜出的约定,而不是自然规律。IBM 在 1964 年发布的 System/360 采用了 8 位字节,此后几乎所有计算机都沿用了它。八个比特能表示 256 个值,足够容纳大小写字母、数字和符号;而且 8 是 2 的幂,能让硬件和运算保持简单。

4 个比特为什么叫 nibble?

nibble(半字节)就是半个字节,这个名字是个双关:byte 谐音 bite(咬一口),nibble 就是“小口咬”。四个比特能表示 16 个值,正好是一位十六进制数字,所以一个字节总是写成两位十六进制数,每个半字节对应一位。这个词有时也拼作 nybble。

1 个字节是 4 位吗?

不是。1 个字节是 8 位。4 位是半个字节,叫作半字节(nibble)。

字节和 GB 哪个大?

GB 大得多:在硬盘厂商使用的十进制体系中,1 GB 是 10 亿字节(1,000,000,000);在 Windows 使用的二进制体系中,则是 1,073,741,824 字节。字节是基本单位,KB、MB 和 GB 都是它的倍数。

一个字节长什么样?
一个字节是一排八个 0 和 1,比如 01000001。这个模式表示数字 65,也是 ASCII 中字母 A 的编码。程序员通常把字节写成两位十六进制数字,所以 01000001 就写作 41。
Coddy 编程语言插图

和 Coddy 一起学编程

开始