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



为何一个byte有8bit而不是7/9/4/16bit ? 第1页

  

user avatar   ta123 网友的相关建议: 
      

对于这个问题的解释主要分为两方面,一方面是1byte确实曾经可以不是8bit,另一方面是“什么样的历史因素”导致1byte现在是8bit。

感觉是做了一个语言(历史)学的工作。。 。

==========Part I============

byte的概念最早是用来表示一个“字”,也就是char。

quora上在对于这个问题有人贴了一个来自60s的5bit Telex,它可以表示26个英文字母。

但是它无法取法大小写,所以我们需要再加一个CapsLock,于是就有了6bits的byte。事实上,最早的商用机就是6bits的( IBM1401, Honeywell200, PDP8)。

6bits=64=54+10,恰好可以表示26个大小写字母+10个数字了,但是我们还需要若干常用字符。于是就有了许许多多更为复杂的编码系统,其中就包括IBM的EBCDIC(Extended binary coded decimal interchange code)和ASCII(American standard code for Information Interchange),它们都是8bit的编码系统,处理拉丁字母、数字和常用符号是绰绰有余了。其中ASCII是7bits+1parity,使得正确率大大提高(这可能是它后来广为流行的原因之一)。虽然如今那一位已经不再需要作为奇偶校验位而存在了。

为了表示更多的字符像是汉语、片假名、音标、颜文字、数学符合和满足人类的各种脑洞,本还有更多的编码系统。第一台迷你计算机有12bits,后来又有16bits的。

事实上,在C标准中,仅仅是要求1char≥8bits。也确实有不少对C/C++的实现是可以支持1byte=9,16,32,36bits的,实际上1byte到底有多大是作为一个常数CHAR_BIT写在limits.h里的。(我找到了我的CHAR_BIT~发现它确实等于8!)

===========Part II===============

虽然这看起来是百花齐放的局面,1byte是多少bits完全是依赖于硬件的。但IBM在1964年推出的IBM360 family对8bits的推广起到了非常大的意义;不过后来在home computer,personal computer市场中,ASCII打败了EBCDIC成为主流编码格式;但直到70s,1byte和8bits之间也并没有画上等号,tcp/ip协议中使用了octet的概念——1个IPv4的地址是4个octet——用来表示一个8bits的“字”,这就足以说明那时1byte=8bits还并不足以成为一条law。

主流厂商对于8bits硬件的支持和互联网的普及使得8bits的byte慢慢取代了其他的byte,也使得byte=octet。1byte=8bit逐渐成为了de facto standard。


所以后来在需要有新的字符集和编码系统的时候,人们不再选择扩大byte_size,而是选择用2个或4个byte,就是现在的utf-8和unicode等等。

1999年发布的IEC 60027-2中,写入了1octet=8bit;2008年发布的的iso/iec 80000-3中,写入了1byte=8bits。

所以这个“不成文的规定”就被作为正式的规定写下来了。就像是把一个词语写进词典,不过是对于过去的流行的总结罢了。我相信随着时间的流逝,一切都会改变。这篇回答仅仅能解释过去和现在,并不能解释未来~


=======================

看到有评论说在音频和视频采样的时候会用到不是8bits的byte,我觉得既然byte的大小已经被iso/iec承认了,那么在现代的机器上还会有用不一样的byte_size的嘛?这点我表示怀疑。

=======================


对这个问题蛮感兴趣的。。就去google了一发。想找个地方整理一下,所以就写在这里了,也不知道合不合适。因为我英语实在是太差了,好不容易艰难读了那么多段英文,如果不写下来就会忘记的,我不想忘记!




  

相关话题

  如果你有一台超级计算机,你会拿来做什么? 
  为什么说「动态类型一时爽,代码重构火葬场」? 
  如何看待 IBM 宣布成功研制 50 量子比特量子计算机原型机? 
  打字速度对编程的影响大吗? 
  计算机存储浮点数的时候,为什么不使用十进制来存储呢? 
  如何看待方舟编译器于 2019 年 8 月 31 日开源? 
  清华大学计算机专业本科这位在「自己写的 CPU 上运行自己写的操作系统」的同学是什么水平? 
  面对大数据杀熟、算法困住骑手,民主促进会中央建议推行算法开发主体责任制,你怎么看? 
  光刻机,计算机半导体硬件研发和制造,需要那些学科? 
  为什么大多数程序主函数成功时都return 0; 不return 1; ? 

前一个讨论
管轶说要做抗体检测,为啥有些人反应这么激烈?
下一个讨论
将编程语言中的英文替换成中文并将其完善为一门国人普遍接受的编程语言,需要哪些条件?





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