百科问答小站 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语言的编程软件推荐一下,本人万分感谢? 
  初中文凭可以学习编程吗?如果可以,是去靠谱的培训机构还是自学?学习方向都有哪些?就业环境如何? 
  用C语言,能在100行之内实现贪吃蛇吗? 
  这个图左边这个程序的输出值不太懂为啥是10? 
  在有能够转化为C、C++、Java的第四代语言Raptor的情况下,为什么还需要C等程序设计语言? 
  C语言中后缀自加i++表达式的值到底是谁的值? 
  是否有办法在malloc的hook函数中调用原生malloc? 
  我有个同学说C语言太低级了,没有易语言强大好用。请问我该如何反驳? 
  有没有什么程序库使得我们可以比较方便的在windows下使用比较新版本的opengl的? 
  如果有两颗药丸,一颗吃了让你写代码100%不出错,另一颗吃了能让你100%发现并修改bug,选哪颗? 

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





© 2024-12-26 - tinynew.org. All Rights Reserved.
© 2024-12-26 - tinynew.org. 保留所有权利