这完全是一个历史遗留问题。
最早的计算机有 4-bit、6-bit、7-bit 等好多种。IBM在 1950 年设计 IBM 7030 Stretch 的时候引入 byte 的概念,表示访问内存的最小单位。叫 byte 就是为了跟 bit 有所区分,别弄错了。7030 一个 byte 可能包含1-bit到8-bit不等,但最多是8-bit。
等到了1964年,IBM 设计出IBM System/360大型机,取得重大成功。而System/360的一个byte就是 8-bit。同时期的 AT&T 公司引入了 μ-law 算法,用来实现数字化语音传输,也是用了 8-bit 的 byte。
微型计算机要到 1970 年代早期才出现,那个时候8位byte已经用了将近十年了,自然大家就继续使用了。
但为什么 IBM 要在 System/360 中使用8位byte呢?有一种说法是为了兼容老数据。IBM在1800年代靠穿孔卡系统起家(当时用于人口普查,甚至还被希特勒用于迫害犹太人)。使用穿孔卡的老数据都是 6-bit 一组。IBM 想兼容这些老数据,至少要用 7-bit 的 byte。但 7-bit 不够用,于是就选了 8-bit。
其实,整个过程有很大的偶然性。如果当年 IBM 将 6-bit 来个 double 变成 12-bit,也是能用的。那现在就会有人问为什么一个 byte 是 12 位了。
一些人没有回答到点子上。 这件事得追溯计算机历史,源于IBM360操作系统和图灵奖得主(Fred)Brooks Jr。
布鲁克斯被问到“您认为自己最大的技术成就是什么?”
Brooks回答说:“我做出的最重要的决定是将IBM 360系列从6位更改为8位字节,从而允许使用小写字母。这种变化传播到了所有地方。”
他的原话维基百科上有:
In 2004 in a talk at the Computer History Museum and also in a 2010 interview Wiredmagazine, Brooks was asked "What do you consider your greatest technological achievement?" Brooks responded, "The most important single decision I ever made was to change the IBM 360 series from a 6-bit byte to an 8-bit byte, thereby enabling the use of lowercase letters. That change propagated everywhere."
---
一个字节能不能100位或者更多呢?理论上当然是可行的。只不过这样随便存储一个字母比如“a”就要动辄100个位,太浪费存储空间了。
而8位就刚好,8位能容纳ASCII字符集,又不太浪费。布鲁克斯的做法太漂亮了。
一开始可不是8位,历史上有过以各种位数定义为1字节,比如4位7位等,Byte这个词最早就是用来定义所生产的机器的字符编码长度,或指令长度,那个时候并没有通用的硬件架构,所以不同厂商的机器是不兼容的,指令集不兼容,字符集也不兼容。
现在8位1字节有约定俗成的关系在里面,这成了一个共识。这么说吧,现在你可以自己定义字节的含义,比如10位1字节,基于此生产机器,定义指令,你看看谁来给你的机器写程序,没人会陪你玩,所以大家都遵从8位1字节的定义。
你再看看各种rfc文档里,其实提到字节的时候用的词都是Octet而不是Byte,就是因为Byte有歧义,Octet明确指的就是8位1字节