百科问答小站 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 语言程序源码可供新手临摹参考? 
  面向对象程序设计比传统的面向过程程序设计更有什么好处? 
  两年嵌入式C语言编程经验,如果有机会做和 Android 相关的 C++、JAVA,还有 Javascript 脚本开发工作,转过去好吗? 
  计算机科班生学计算机组成原理的意义何在呢? 
  Visual Studio 2019可以用来玩C语言吗? 
  C语言初学者,想问下面这个代码哪里不对,为什么运行不了呢? 
  如果有两颗药丸,一颗吃了让你写代码100%不出错,另一颗吃了能让你100%发现并修改bug,选哪颗? 
  学C++花了一天半刚搞懂指针和数组,怎么提高效率? 

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





© 2024-11-25 - tinynew.org. All Rights Reserved.
© 2024-11-25 - tinynew.org. 保留所有权利