为什么比特数总是(?)是2的幂?
我们有8位,16位,32位和64位的硬件架构和操作系统。 但不是,比如42位或者69位。
为什么? 2 ^ n位是一个更好的select,还是与现有系统兼容? (一个64位寄存器可以容纳两个32位指针,或者一个32位数据单元可以容纳4个字节,显然很方便)。
这主要是传统问题。 这并非总是如此。 例如,处理器(甚至是当代的)中的浮点单元具有80位寄存器。 没有什么会迫使我们有8位字节而不是13位字节。
有时这有math推理。 例如,如果您决定使用N位字节并且想要进行整数乘法,则需要精确的2N位来存储结果。 那么你也想加/减/乘这些2N位整数,现在你需要2N位通用寄存器来存储加/减结果和4N位寄存器来存储乘法结果。
http://en.wikipedia.org/wiki/Word_%28computer_architecture%29#Word_size_choice
不同数量的内存用于存储不同精度的数据值。 常用的大小通常是地址parsing单位(字节或字)的2倍。 将数组中项目的索引转换为项目的地址,则只需要移位操作而不是乘法。 在某些情况下,这种关系也可以避免使用划分操作。 因此,大多数现代计算机devise的字大小(和其他操作数大小)是2倍大小的字节的功率。
部分,这是一个解决的问题。 具有N位地址可以使您最多处理2 ^ N位的内存,而硬件devise人员则倾向于充分利用此function。 所以,你可以使用3位来解决8位总线等。
历史悠久的PDP-10是36位。
许多(大多数)早期的微处理器中的CPU具有一些不是2的幂的位数。
特别是,Seymour Cray和他的团队build立了许多非常有影响力的机器,它们具有非2的字长和地址大小(12位,48位,60位等)。
早期计算机数量惊人地多达36位,完全是由于人类有10个手指这一事实。 维基百科的“36位”文章更详细地介绍了10位和36位之间的关系,并链接到许多其他历史上重要但不再stream行的位大小的文章,其中大多数不是二的幂。
我推测这一点
(a)8位可寻址存储器变得stream行,因为存储7位ASCII码和 4位BCD码稍微方便一些,而且每个字符没有尴尬的包装或浪费多位; 没有其他的内存宽度有很大的优势。
(b)正如斯蒂芬·C·斯蒂尔(Stephen C. Steel)所指出的那样,这个微小的优势乘以规模经济和市场力量 – 使用了更多的8位宽的存储器,所以规模经济使它们稍微便宜一点,导致更多的8在新devise中使用的位宽存储器等
(c)在理论上,更宽的总线宽度使得CPU更快,但是将整个CPU放在单个芯片上使其比任何以前任何总线宽度的多部分CPU系统更便宜,也许稍微快一些。 起初,一个4位的CPU几乎没有足够的晶体pipe,然后是一个8位的CPU。 后来,几乎没有足够的晶体pipe16位的CPU,一个巨大的吹捧和“16位”的营销活动。 正确的时间,人们会期望一个24位的CPU …
(四)RISC的革命。 前两个RISC芯片是32位的,无论出于何种原因,人们已经习惯于认为“更多位更好”,所以每个制造商都跳上了32位的潮stream。 此外,IEEE 754-1985标准化了32位和64位浮点数。 有一些24位CPU,但大多数人从来没有听说过他们。
(e)由于软件兼容性的原因,制造商甚至在具有64位前端总线的处理器(例如Intel Pentium和AMD K5等)或者具有4位宽的主板上也保持了32位数据总线的错觉巴士(LPC巴士)。
你的内存系统想成为一个字节倍数,这使得你的caching想成为一个字节倍数,这使得你的整个系统想成为一个字节倍数。
作为一个硬件devise人员,你通常要deviseCPU的字节边界的某种types,即8的倍数。否则,你要么必须添加很多尴尬的电路到一个49位系统,使其利用模8位,或者你最终忽略了额外的位,在这种情况下,这是浪费,除非你需要额外的位指令,这在16位或更宽的系统中从来就不是这样。
正如其他人所指出的那样,早期的事情并不是那么明显:文字是各种各样的古怪。
但是在8位字节上标准化的推动也是由内存芯片技术驱动的。 在早期,许多内存芯片被组织为每个地址1位。 n位字的存储器通过使用n个存储器芯片(相应的地址线连接在一起,每个芯片单个数据位有助于n位字的一位)构造。
随着存储器芯片密度的提高,制造商将多个芯片封装在一个封装中。 由于最常用的字长是8位的倍数,所以8位内存特别受欢迎:这意味着它也是最便宜的。 随着越来越多的架构跳入8位字节的stream行,不使用8位字节的内存芯片的价格上涨越来越大。 类似的论点是从8-> 16,16-> 32,32-> 64的移动。
你仍然可以devise一个24位内存的系统,但是这个内存可能会比使用32位内存的类似devise昂贵得多。 除非有足够的理由坚持24位,否则大多数devise者会select32位,而且价格更便宜,function也更强。
一次,计算机字长度往往是6位的倍数,因为计算机通常使用6位字符集,而不支持小写字母。
IBM为Los Alamos制作了一个64位字的高性能计算机STRETCH。 它有一个不寻常的特点,就是可以直接对计算机内存中的各个位进行寻址,这就迫使字长成为2的幂。 它还有一个更扩展的字符集,允许包括math符号(除小写外); 他们被用在名为COLASL的特殊高级语言中。
当IBM推出非常受欢迎的System / 360主机时,即使它没有位寻址function,它仍然保留了8位字节,主要是为了将十进制数量的压缩数据有效地存储在十进制数字的四位。 因为这台机器如此受欢迎,所以非常有影响力,DEC的PDP-11电脑devise成16位字和8位字符。 PDP-11也是第一台真正的小端机器,也是非常受欢迎和有影响力的。
但这不仅仅是因为追随时尚。 8位字符允许小写文本,并且随着计算机变得更便宜,能够容易地将它们用于文字处理被重视。 就像STRETCH需要一个单位具有两个大小的位数以容易地处理位的字一样,今天的计算机需要有一个是8的幂的倍数(恰好是二到第三权力本身),以便容易处理angular色。
如果我们仍然使用6位字符,计算机将倾向于有24位,48位或96位字。
相关的,但可能不是原因,我听说一个字节的8位的约定是因为这是IBM如何assemblyIBM System / 360架构。
一个常见的原因是你可以用二进制数字来表示你的位数。 这在很多情况下都很有用。 例如,在移位或旋转操作。 您可以将0到15位的16位值进行旋转。 试图旋转16位也是微不足道的,这相当于一个超过0位的旋转。 而在1027位上的旋转等于在3位上的旋转。 通常,宽度为W的寄存器在N位上的旋转等于在N模W上的旋转,并且当W是2的幂时,操作“模W”是微不足道的。
80286,8086,8088和80286及其后的处理器上的“实模式”使用了一个20位的分段存储器寻址系统。 80286有24个本地地址线,然后386和更高版本有32或64。
另一个反例:PIC16C8X系列单片机有一个14位宽的指令集。
字节与主要是西方世界的字符编码有关,因此是8位。 单词与地址宽度相关的编码无关,因此它从4到80等不等
我可靠的老式HP 32S计算器是12位的。
因为为地址保留的空间总是固定的位数。 一旦你定义了固定的地址(或指针)的大小,那么你想要做的最好,所以你必须使用它的所有值,直到它可以存储的最高数字。 你可以从多个位(0或1)得到的最高数字总是2的幂
可能你可以在这里find一些东西: Binary_numeral_system
ICL 1900都是24位(字)。 打赌有没有很多人记得这些。 你做 ??
我们只看PIC单片机。