百科问答小站 logo
百科问答小站 font logo



为什么一个字节定义成8位? 第1页

  

user avatar   taoshu0 网友的相关建议: 
      

这完全是一个历史遗留问题。

最早的计算机有 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 位了。


user avatar   bing_eureka 网友的相关建议: 
      

一些人没有回答到点子上。 这件事得追溯计算机历史,源于IBM360操作系统和图灵奖得主(FredBrooks 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字符集,又不太浪费。布鲁克斯的做法太漂亮了。


user avatar   hsldymq 网友的相关建议: 
      

一开始可不是8位,历史上有过以各种位数定义为1字节,比如4位7位等,Byte这个词最早就是用来定义所生产的机器的字符编码长度,或指令长度,那个时候并没有通用的硬件架构,所以不同厂商的机器是不兼容的,指令集不兼容,字符集也不兼容。

现在8位1字节有约定俗成的关系在里面,这成了一个共识。这么说吧,现在你可以自己定义字节的含义,比如10位1字节,基于此生产机器,定义指令,你看看谁来给你的机器写程序,没人会陪你玩,所以大家都遵从8位1字节的定义。

你再看看各种rfc文档里,其实提到字节的时候用的词都是Octet而不是Byte,就是因为Byte有歧义,Octet明确指的就是8位1字节




  

相关话题

  在C源代码中, 无论出现多大的数, 都是有效的吗? 
  计算机掉电的时候 CPU 真的会中断吗?操作系统会进行那些动作? 
  C语言中指针与数组都可以用a[3]表示,那它们是不是相同? 
  CPU检测到中断信号时,怎么知道是发给哪个进程的? 
  为何对于无符号数,右移必须是逻辑的? 
  进程的堆栈区和%esp的堆栈是否是一个概念? 
  C语言仅凭自学能到什么高度? 
  C++ 无法取代 C 吗? 
  C/C++中按值传递比按地址传递更快吗, 引用呢? 
  c语言程序经过编译后,每条指令都有一个内存地址,那两个程序如果有相同内存地址的指令怎么办? 

前一个讨论
该怎么给程序猿定 KPI ?
下一个讨论
android主线程如何保证获取足够的时间片?





© 2024-05-18 - tinynew.org. All Rights Reserved.
© 2024-05-18 - tinynew.org. 保留所有权利