为什么字节为八位的历史是什么?


86

在决定使用八位组作为基本单位时,历史力量在起作用,需要进行权衡吗?

曾经有一些机器使用其他字长,但是今天对于非八位制,您必须寻找博物馆作品,用于嵌入式应用的专用芯片和DSP。字节是如何从计算机设计早期的混乱和创造力中演变出来的?

我可以想象,更少的位对处理足够的数据以使计算可行无效,而太多的位将导致昂贵的硬件。比赛中还有其他影响吗?为什么这些力量平衡到八位?

(顺便说一句,如果我可以花时间旅行,我会回到“字节”被声明为8位的时候,并说服每个人将其变成12位,并用21世纪初期的小饰品贿赂他们。)


7
这也许是我们最好的老维基百科无法回答的问题之一。
Scott Whitlock

10
那么,为什么要选择12位而不是8位呢?
FrustratedWithFormsDesigner

8
开玩笑的最后一句话是吗?12位字节将是不方便的,因为它不是2的幂
罗布

19
那时的存储器和寄存器还不那么便宜,因此8位是一个不错的折衷,相比之下6位或9位(36位字的分数)是个不错的选择。同样,以2的幂进行地址计算要简单得多,当您使用小罐装原始晶体管制造逻辑时,这一点就很重要。
Mike Dunlavey

9
在早期,使用2的幂的单词大小并不那么重要。DEC-10具有36位字,而CDC 6000系列具有60位字,而索引寄存器具有18位。
杰伊·埃尔斯顿

Answers:


75

5位baudot码确实做了很多真正的早期工作,但是很快就变得非常局限(只有32个可能的字符,因此基本上只有大写字母和一些标点符号,但数字的“空格”不足) 。

从那里开始,相当多的机器使用了6位字符。但是,这仍然远远不够-如果您要使用大写和小写(英文)字母和数字,那么只剩下两个用于标点符号的字符,因此大多数字符集中只包含一个字母。

ASCII定义了一个7位字符集。很长时间以来,这种“足够好”的使用已经成为大多数新字符集的基础(ISO 646,ISO 8859,Unicode,ISO 10646等)。

二进制计算机激励设计人员将大小的幂乘以2。由于“标准”字符集无论如何都需要7位,因此再增加一位以获得2的幂数并不需要花费太多时间(到那时,存储变得越来越便宜,大多数字符都“浪费”了一点时间)也被接受)。

从那时起,字符集已移动到16位和32位,但是大多数主流计算机很大程度上都基于原始的IBM PC。再说一次,市场上足够多的人对8位字符感到满意,即使PC尚未达到目前的主导水平,我也不确定每个人都不会使用较大的字符来做所有事情。

我还要补充一点,市场已经发生了很大变化。在当前市场中,字符定义的大小由硬件定义的少于软件。Windows,Java等很久以前已移至16位字符。

现在,支持16位或32位字符的障碍仅是最小的,原因是16位或32位字符本身固有的困难,而很大程度上是总体上支持i18n的困难。例如,在ASCII中,检测字母是大写还是小写,或者在两者之间进行转换是非常琐碎的。在完整的Unicode / ISO 10646中,它基本上是难以描述的(要点是标准甚至不尝试-它们只是提供表,而不是描述)。然后,您添加一个事实,即对于某些语言/字符集,甚至大写/小写的基本概念都不适用。然后添加一个事实,即使在其中一些字符中显示字符仍然要复杂得多。

这些都非常复杂,以至于绝大多数软件甚至都没有尝试过。情况正在缓慢改善,但执行起来却很缓慢


9
我以为我读过somwehere 8,它来自7位ASCII编码,外加一个验证位,这是因为几乎传输协议并不是像设计人员所希望的那样无损:-)。
马丁·约克

3
@LokiAstari,是的,它称为奇偶校验位,可用于错误检测或恢复的粗略形式。维基百科:奇偶校验位
CVn

2
不确定IBM PC与此相关。CP / M时代(<1980年)已经开始以“每字节8位”为标准,该时代始于8080 CPU(IBM PC时代8086/8的前身)
MSalters 2011年

1
@MSalters:最初,它(可以说)“震惊”了硬件的发展。不,8位/字节是不是新的与PC,在那之前,大多数架构每隔几年更换。PC在很大程度上阻止了这种情况,并采用了一种即使在新的时候就没有特别进步的架构,并将其保存了数十年
杰里·科芬

2
当前的字符集不是16位或32位,Java和Windows也不使用。当前字符集是Unicode,需要21位才能直接映射。当前的软件使用基于8(UTF-8),16(UTF-16)或32(UTF-32)位代码单元的编码,在必要时组合多个代码单元以形成单个代码点,但是这些位长是结果硬件,而不是字符集。
塞巴斯蒂安·雷德尔

10

七位用于ASCII信息,一位用于错误检测奇偶校验。


27
7位元的ASCII码和一个已用于各种用途的额外位
Martin Beckett

1
在处理早期记忆时,奇偶校验非常重要。即使移到8位数据字节后,也有9位的存储芯片可以进行奇偶校验。
Jim C

1
这是一个有趣的断言。是否有任何历史数据可以支持该想法?
大卫

6

看看有关8位体系结构的Wikipedia页面。尽管字符集本来可以是5位,6位然后7位的,但是底层CPU /内存总线体系结构始终使用2的幂。最开始的微处理器(大约1970年代)具有4位总线,这意味着一条指令可以移动4位。外部存储器和CPU之间的数据位。

然后,随着8080处理器的发布,8位体系结构变得流行起来,这就是x86汇编指令集的开端,该指令集一直使用到现在。如果我不得不猜测,字节来自这些早期的处理器,主流公众开始接受并使用PC,而8位被视为单个数据单位的标准大小。

从那时起,总线大小一直加倍,但始终保持2的幂(即16位,32位和现在的64位)。实际上,我敢肯定,当今总线的内部结构比64条并行线要复杂得多,但是当前的主流CPU体系结构是64位。

我认为,通过始终加倍(而不是增长50%),可以使与现有应用程序和其他旧组件共存的新硬件更容易。因此,例如,当它们从8位变为16位时,每个指令现在可以移动2个字节而不是1个字节,因此可以节省一个时钟周期,但最终结果是相同的。但是,如果您从8位架构转变为12位架构,则最终会将原始数据分解为一半,然后进行管理可能会很烦人。这些只是猜测,我并不是真正的硬件专家。


5
“非常第一个CPU(大约1970年代)...”。您需要对计算历史进行一些阅读!!冯·诺依曼体系结构计算机的第一个CPU是在第二次世界大战期间或之前(取决于您相信的历史版本)构建的。
Stephen C

并且在19世纪有计算设备,我敢肯定,埃及人有某种计算器。该信息来自我链接的Wikipedia页面。就像我说的那样,我不是硬件专家,也不是历史学家,但是如果您觉得我还差得远,那么您可能想要更新该维基百科页面。
DXM

我想,如果我在输入时不加弄错链接,那会有所帮助。对于我说“第一个CPU”,我也表示歉意。自从我引用Wiki页面以来,我应该说“第一个微处理器”。我正是这个意思。对于那个很抱歉。
DXM

“前电子”计算机的一种解决方案是说现代计算机,或者我想是电子计算机。即使在今天,您也可以建造机械计算机。直到我们开始利用电子场发挥我们的优势时,我们才构建了微处理器。
Ramhound

PDP系列使用的8位字节和16位字长也可能影响了8位字节的普及。
杰伊·埃尔斯顿,

4

一个字节有不同的(至少)1、4、6、7、8、9、12、18、20位,可能还有36位,具体取决于要查看的计算机。我在这里用“字节”来表示“内存的最小可寻址单位”,而不是使用任何以文本为中心的解释。(例如,Saturn CPU,这是流行的HP48SX / GX计算器系列中使用的64位CPU,以4位为单位对存储器进行寻址)。

20位字节在50年代的“ IAS机器”中极为常见。6、12、18(也许是36)在60年代,70年代以及某种程度上在80年代的各种架构中非常流行。

最后,似乎已经赢得了“ 2的幂”和“可寻址单元中的位”之间的良好对应关系。


永远不会有10位?我只能在Google上找到的一些最近的视频处理器是10位。
rslnx 2014年

@khrf有可能,我只是不记得拥有它的任何体系结构(我主要认为是通用计算机)。
Vatine 2014年

是的,我也考虑通用计算机。这很奇怪,因为我想知道您可以用1字节寻址1 KB,用2字节寻址1兆字节等会有10位字节的字节有多好。当然,这只是
出于

2

首先要澄清一下:八位字节(8位单元)实际上并不是现代计算机体系结构中的基本单元。至少没有比2,2,4,16,32,64,128等的其他幂更基本的东西。八位字节是8位处理器的基本单位(因此得名!),但是现代体系结构通常使用更大的位-内部设置。例如,x86_64具有64位整数寄存器和80位浮点寄存器。RAM以64位块的形式进行读写,而处理器仅使用一点魔术就可以处理单个8位字节。

对于较旧的体系结构,“字节”表示数据总线的大小,并且如原始问题所述,存在许多不同的总线大小(4、5、6、8、12等)。但是自1993年以来,为了使数据大小具有标准化的SI单位,已将字节定义为8位。因此,“字节”的含义已经从与体系结构相关的单元变为与体系结构无关的标准化单元。

因此,如今,字节是用于寻址和量化数据的标准单位,但实际上并不是基本的单位。

八位字节单位成为事实上的存储标准,主要是因为担心存储文本。对于存储文本,理想情况下,您希望一个字节存储一个字符。有两个重要因素:

  • 在设计数字系统时,具有两个(2、4、8、16、32等)的幂的单位更方便。
  • 8位足以在ASCII字符集中存储单个字符(有足够的空间来扩展字符集以支持西里尔字母)。

当然,8位还不足以支持所有脚本-日语(日语)至少需要16位(对于它而言,Unicode为21位),但是在那时,位非常昂贵,大多数数字文本都在其中ASCII范围。

如今,文本通常以宽度可变的编码(如UTF-8)存储,而诸如Unicode组合字符之类的东西,“一个字节等于一个字符”早已成为历史。出于历史原因,今天的字节实际上只是标准。


1

根据我的信息,字字节本身是由八(8)位字的短语by-by衍生的。我们在8位字中发现的便利是转换为十六进制值,因为值00000000 = 00&11111111 = FF(对于无符号,Dec 255,对于带符号,-127,dec),这样的结构很容易进行所有算术运算,包括按位运算操作。

我认为字节(8位字)是字长的自然演变,从灾难性的小3位到可笑的大60位字


我希望看到一个参考。我对此表示严重怀疑。特别是在C标准中使用并结合在C ++标准中的“字节”一词并不意味着“ 8位”。8位数量是一个八位位组。
gnasher729

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.