百科问答小站 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了一发。想找个地方整理一下,所以就写在这里了,也不知道合不合适。因为我英语实在是太差了,好不容易艰难读了那么多段英文,如果不写下来就会忘记的,我不想忘记!




  

相关话题

  为什么现在很多人对网络空间安全专业持劝退态度? 
  去美国读 CS Master,有哪些虽然不知名,但是老师和就业很好,性价比很高的学校? 
  理工男,我感觉 win10 挺好用的,一点不卡,为什么有那么多人买Macbook 呢? 
  Linux设备驱动开发 新手,创建第一个字符设备驱动时对一些代码的功能不是很了解,能解释一下吗? 
  为什么推荐系统要推荐用户喜欢的东西? 
  python是用C实现的,Java是用C++实现的,那为什么不直接用C或C++呢? 
  会写 Parser、Tokenizer 是什么水平? 
  就代码能力和开发经验来说,姚期智是不是根本就不如稍微有三到四年开发经验的程序员? 
  为什么国外大学计算机系本科生培养如此强调函数式编程? 
  在计算机中utility应该怎么翻译? 

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





© 2024-10-31 - tinynew.org. All Rights Reserved.
© 2024-10-31 - tinynew.org. 保留所有权利