字节

来自GSXAB的知识库
字节
术语名称 字节
英语名称 byte

字节(byte),指计算机存储数据的基本单位,现代是由 8 个二进制位组成的二进制串。也作为常用数据长度单位,用于存储容量的计量。

本单位在 IEC 80000-13 、 IEEE 1541 中符号为 B ,需区分其为大写字母 B 而非小写字母。这一单位前通常使用二进制词头。中文习惯中,使用带二进制词头的字节时,直接使用词头称呼。如“KiB”“MiB”“GiB”“TiB”“PiB”等直接称为“K”“兆”“G”“T”“P”,以此类推。

需要注意,除了作为计量单位的场景外,字节的本质是存储中的单元,而不是长度本身,其边界必须与存储的实际边界对齐;跨过边界的 8 个连续的二进制位由于本身不是一个单元,不可以称为一个字节。

历史

现在可认为字节就是 8 位组,但历史上并不是这样,因此即使现在,涉及非标准场景时仍需要特别注意。以下历史主要摘抄自 https://en.wikipedia.org/wiki/Byte

1956 年 6 月 IBM Stretch 设计时,由 Werner Buchholz 创造的词汇。也一说是 1956 年或 1957 年 Louis G. Dooley 在制造防控系统 SAGE 时对于小于计算机长的特别是四位组的称呼。在这一阶段,字节的含义更接近“编码一个字符所需的数据位数”,因此在仅使用 BCD 的机器中,往往使用 4 位字节,在使用大写字母、数字和符号的场景中(如 BCDIC ),往往使用 6 位字节,但实际上可以被描述为任意的一同存取的 1~6 位的结构。

1960 年代, ASCII (1963)和 EBCDIC (1964)的出现继续扩展了字节的大小,随着 IBM 旗下 System/360 (1964)取得了巨大商业成功,其使用的八位字节推动了八位为基础的存储,成为了事实标准。

1970 年代, Intel 8080(1974) 等微处理器芯片也是 8 位 CPU ,以 8 位作为单次处理数据的基本长度(字),且指令上也支持将一个 8 位字节视为两个 4 位的半字节的操作。这进一步推广了 8 位字节在软硬件上成为标准。

为了避免长度歧义,在字节长度有确切标准前存在两种做法:

  • 声明字节所具有的最小长度或能容纳的最小数据范围。如 C 语言标准中, char 规定需要能够容纳基本字符集、至少为 8 位,且可通过 CHAR_BIT 取得具体的位数。
  • 不模糊地使用字节一词,而是指定所使用的单位长度。常见于通信协议等长度属于软件解析而不是硬件存储的场景。在这一场景中,字节一词全部使用八位组(octet)代替以避免误解。


模板:存储空间单位

琐事

词源

提出 byte 这一术语前只有二进制位(bit)和表示单次并行传输的字(word)。尽管有字符一词,本身会受到不同应用的编码影响,可能使用的二进制位数不同(此时还没有字节,更没有以字节为单位编码的默认习惯),当时选择了“一口”(a bite of)数据的形容,并将其改变拼写以避免与 bit 混淆。不过文献中没有直接提到为何选择 bite 这一形容,推测可能是基于 bit 字形及读音的文字游戏,也可能是选择了和“bit”字面含义的一点相似但更多的“一小份”的量。