一个字节(Byte)一定等于八个比特(Bit)吗

1,743 阅读6分钟

0.版权声明

因在学习经历中接触到了Octet这一概念,引发了本人对一个字节究竟等于几个比特的兴趣,从而促成了本文的诞生。

本文章编写的初衷也是希望能为有相同需求的同学提供帮助,因此欢迎转载,只需附上作者姓名与原文链接即可。

如果在文章阅读过程中有任何问题,请与作者联系 ifanxi1998@gmail.com

0+.引言

当我们提起字节(Byte)这一概念时,很多人都会下意识的想到“一个字节等于八个比特”这一公理。那么一个字节是否真的就等于八个比特呢?本文将从字节的定义与诞生讲起,深度剖析字节与比特的纠葛。

1.什么是字节(Byte)

1.1.字节的定义

字节(Byte)是一种计算机领域中的信息计量单位,是针对通信与数据存储时的一个概念。当我们使用字节来描述某一段信息或数据时,我们并不用去考虑该段信息是属于何种数据类型。

1.2.字节的诞生

字节一词是Werner Buchholz于1956年6月在IBM Stretch计算机的早期设计阶段发明的,其英文Byte来源于Bite(咬)一词,为了与Bit做一区分,特地变‘i’为’y‘,成为我们今天所看到的Byte。

Byte denotes a group of bits used to encode a character, or the number of bits transmitted in parallel to and from input-output units. A term other than character is used here because a given character may be represented in different applications by more than one code, and different codes may use different numbers of bits (i.e., different byte sizes). In input- output transmission the grouping of bits may completely arbitrary and have no relation to actual characters. (The term is coined from bite, but respelled to avoid accidental mutation to bit.)

Via COMPUTER SYSTEM _PROJECT STRETCH

从IBM的Stretch项目文档中我们不难看出,字节在诞生伊始,其目的仅是表示用于编码单个字符所需要的比特(bit)数量,或者与输入-输出单元相匹配的一组比特数量。并且在不同的应用中或使用不同的编码方式时,这一数量的大小也不尽相同。

1.3.一个字节从什么时候开始等价于八个比特

相信当今绝大部分的ICT行业从业人员,无论是在学习计算机相关知识还是曾经在大学的计算机期末考试中,遇见1个字节等于几个比特这种问题,最先闯入脑海的答案必然是8个。确实,今日标准以8比特作为1字节,在一些行业规范(例如工业标准、计算机网络、电信技术等)中常直接以8比特代表1字节。

然而,历史上字节长度曾基于硬件为1-48比特不等,之后有一段时间则常使用6比特或9比特为一字节。那么决定一个字节的大小的因素有哪些呢?它又是如何一步步规范为今日我们所熟知的8比特的呢?

在计算机出现早期,我们只需要使用计算机来处理整数运算,所以也只需要编码数字0-9十个字符,再加上加号’+‘与减号’-‘两个算数运算符,共计11种字符,此时我们只需4比特来进行编码就足够表示了。再后来我们又需要对字母进行处理,大小写字母加上数字,再加上例如逗号等标点符号,这时大概有了70多种字符,此时我们需要7比特来进行编码才能够表示完全。

那么为什么最后将一个字节确定为了八个比特呢?

一个很有可能的原因是当时IBM的360系统使用8比特位来表示1字符(注意不是字节),并且随着字节(byte)一词被大量使用来描述字符,以及所有计算机都逐步采用8比特表示1字符,所以演变成了现在大家都接受的1byte=8bit这一概念。

综上所述,1byte=8bit这一概念更像是计算机发展过程中约定俗成的规范。

2.Octet的存在

在阅读完了第一章之后,我们可以思考一个问题:“如果我们仅仅想要表达八个比特而又担心使用字节一词不够准确怎么办呢?”这时我们就需要介绍本文的另一个重要单位——Octet了。

2.1.什么是Octet

Octet 是ICT领域一个定义为由八个比特组成的信息单位,中文译作八位组

在今天的语境下Octet经常被用来代替Byte来表示八比特,但在计算机发展的早期你是万万不可这么使用的。原因很简单,正如我们上文中所表述的,曾经一个字节并不一定是由八个比特组成,它多于或少于八位,一个字节的具体大小取决于你的应用环境以及编码方式。不过时至今日,1字节=8比特这一等式已然深入人心,并且被写入了大量的计算机相关官方文档,我们已经可以在常规场合将八位组(Octet)与字节(Byte)同等使用了。

在技术文档中的如十六进制、十进制或八进制等各种数字系统表示方法,都是用来表达Octet的。例如,全部为1的Octet的值等于十六进制的FF,十进制的255,八进制的377。在IP(互联网协议)计算机网络中表示地址时,非常频繁地使用Octet。通常,IPv4地址被描述为由点(Dot)分隔的四个Octet。例如,最高编号的地址表示为255.255.255.255(使用4个全部为1的Octet)。在电信和计算机网络使用的抽象语法符号中,八位数字符串也指的是一个长度可变的Octet序列。

2.2.字节(Byte)与Octet的区别

基于上述表达我们不难看出,Byte和Octet都是信息单位(等于8位),并且在现如今经常被同义使用。虽然两者都代表八位(目前),但在实际应用中使用Octet比使用Byte更受青睐。因为历史原因,如果你使用Byte的话,你的读者可能会在字节数的大小上产生歧义(因为字节数不是一个标准化的单位,在过去它被用来表示从4到10的不同大小的比特串)。尽管Byte在日常使用中被使用,但在正式的技术出版物中更喜欢用Octet这一术语来表示八位。例如,IETF(互联网工程任务组)发布的RFC(征求意见稿)经常使用Octet这一术语来描述网络协议参数的大小。

3.参考文档

[1] PLANNING A COMPUTER SYSTEM BROJECT STRETCH

[2] Wikipedia:字节

[3] Difference Between Octet and Byte

[4] 一字节为什么等于八比特? - UEUEO的回答 - 知乎