1. 简单百科
  2. 二进制

二进制

二进制(英文名:Binary),是德国数学家戈特弗里德·威廉·莱布尼茨(Gottfried Wilhelm Leibniz)于1679年3月15日发明的一种计数系统。

二进制在公元前4世纪的古代印度诗歌韵律、17世纪初的英国培根密码中已有关于“二进制系统”的使用。莱布尼茨于1705年正式发表《论单纯使用0与1的二进制算术—兼论二进制用途及伏羲所使用的古代中国符号的意义》的二进制论文。

二进制定义为:按“逢二进一”的原则进行计数,称为二进制数,即每位上计满2时向高位进1。特点是:每个数的数位上只能是0,1两个数字;二进制数中最大数字是1,最小数字是0;基数为2。二进制可与八进制、十进制、十六进制转换,也可以进行加、减、乘、除四则运算,二进制数也可以通过逻辑代数进行与、或、非等运算。二进制可以应用在多个领域,包括文字、声音、图形等,通过编码、解码可以把现实世界的不同情形表达为“0”“1”,进而利用计算机解决现实问题,在计算机领域中,数制转换通常涉及到二进制到十进制、十进制到二进制、二进制到十六进制、十六进制到二进制的转换以及BCD码、ASCII码的生成等。

定义

二进制定义为:数码0和1,只使用0和1两种数字的计数法,叫做二进制计数法,按“逢二进一”的原则进行计数,即每位上计满2时向高位进1,基数为2,权为2。二进制的特点是:每个数的数位上只能是0,1两个数字;二进制数中最大数字是1,最小数字是0;基数为2。

简史

早期的二进制

现代意义上的二进制是以0和1作为表达的基数的,原始的二进制形式早在古埃及就曾经出现,巴什玛柯娃在《算术》中就表明曾经就以1与2作为基数,数字3则是作为代表一个对象的复数符号。“当埃及人对数字做乘法时也是会使用这个二进制,他们则是将乘数先表示为二进制方式,然后再将各个二进制数与另一乘数进行相乘。”例如X*15=X(1+2+22+23)=X*1+X*2+X*22+X*23。除了古埃及,还有其他很多部族也在使用类似于二进制的数字或者计算。在托列斯峡群岛的一个部族里,数字只有两个—1和2,1叫做乌拉勃,2叫做阿柯扎,数字3、4、5、6分别表示为(“-”不等于现代的减号意义):3=2-1、4=2-2、5=2-2-1、6=2-2-2,这样的古老的原始的计数方式,一定程度上具有二进制的特征,却没有规定其位置进位制。在公元前4世纪前后,印度有一位学者叫平格拉(Pingala)在列举诗歌的种种韵律时,发展出一套描述诗歌韵律的“先进的符号系统”,这套符号系统被美国学者舍利视为最早的二进制体系。平格拉使用两种符号,一个“L”代表长音节,一个“S”代表短音节,一个长音节是一个短音节的二倍。他列举出了十六种组合模式。如果把韵律的短音节“S”用“0”代替,长音节“L”用“1”代替,十六个韵律就是从0到15的二进制数字。

研究发展阶段

大约在戈特弗里德·莱布尼茨发明二进制百年之前,托马斯·哈里奥特(Thomas Harriot)就对二进制进行了一些数学方面的研究,他“使用0和1作为符号计数,并且列举了一些用二进制表达的数字,还研究了二进制与十进制之间的转换方法。”弗朗西斯·培根英国著名哲学家,在1605年写的《学术的进步》一书中,就记载着他自己设计的一套密码系统,被称为培根密码。该系统首先把英语字母表中的字母全部用两个字母a和b来表示,编成密码字母表。如A=aaaaa、B=aaaab、C=aaaba等,如果把字母a和b换成数字0和1,就是二进制数字。

戈特弗里德·莱布尼茨几乎处于同时代的一位西班牙学者J.C.Y.罗布科维茨(J.C.Y.Lobkowitz)也发表了相关二进制的文章,并且要先于莱布尼茨33年,是最先公布的二进制相关研究的学者。他与莱布尼茨的二进制不同的是:首先,莱布尼茨使用1与0作为二进制的符号,他则是使用字母a和0。另一方面,罗布科维茨仅仅只研究了二进制数字符号的表达以及与十进制之间的规律,但是对于二进制的运算却未能进行研究。

1679年3月15日德国数学家戈特弗里德·莱布尼茨用拉丁文写出了创建二进制算术的论文手稿,直到1701年,他把关于二进制的论文《数字新科学论》提交给法国科学院,但被时任巴黎科学院秘书长的丰特内尔婉言拒绝。1703年,莱布尼茨在《数字新科学论》基础上增补了“伏羲八卦”三段内容,以《论单纯使用0与1的二进制算术—兼论二进制用途及伏羲所使用的古代中国符号的意义》于1705年在巴黎出版的《1703年皇家科学院年鉴》上发表。

广泛应用阶段

在19世纪时,由于布尔代数的出现,让戈特弗里德·莱布尼茨的二进制得到应用。二进制代数的建立,给现代二进制计算机的诞生提供了保障,二进制是计算机唯一能够识别的机器语言,它仅仅由"0"和"1"数字符号组成,并被频繁使用。“0”与“1”的恰到好处的能够代表逻辑命题里类似“真”与“假“的表达,这样的适配给予了计算机进行逻辑的计算和判断创造了合适的条件。到了20世纪,人类发明了计算机,二进制才开始得到快速发展。计算机都是基于一种开关式的电路,也就是说这段电路上要么没电、要么有电,就可以表示0或1。大规模的集成电路很容易表示为二进制数,二进制就成了计算机技术中广泛采用的一种进位制。电子计算机的通用语言都是二进制,随着ASCII、Unicode等编码技术逐渐出现,为现代计算机和人工智慧打下了基础。

二进制的表示

对于二进制数的表示,可以在数字的右下角标注2或B。例如,(10010)B就是一个二进制数。不同数位表示的值不同,各位的权是以2为底的连续整数幂,从右向左递增。对于任意一个二进制数N,其按权展开式如下:

(N)B=an-1 X 2n-1十an-2 X 2n-2+...+a1 X 21+a0 X 20+a-1 X 2-1+a-2 X 2-2+...十a-m X 2-m

=ai X 2i

其中,ai表示各个数字符号,为0或者1;n为整部数分的位数;m为小数部分的位数。

二进制的运算

二进制中有两个数字符号“0”和“1”,一个具有两种稳定状态且能相互转换的物理器件便可表示一个二进制数、物理实现简单方便,而且其运算规则也比十进制数的运算规则简单。

加法运算

二进制加法规则为:

0+0=0

0+1=1+0=1

1+1=0进位为1(即结果为10)

1+1+1=1(结果为11),所以两个二进制相加,其加法过程如下:

由此可知,两个二进制数相加,每一位有三个数参加运算(相加的两个数及低位来的进位),按二进制数的加法运算规则必得到本位的和及向高位的进位。

减法运算

二进制减法运算规则为:

0-0=0

1-1=0

1-0=1

0-1=1有借位

0-1-1=0有借位

所以,两个二进制数相减,如11000001-10101010,其减法过程如下:

减法运算与加法类似,每一位有三个数参加运算(本位的被减数和减数以及低位来的借位),按二进制的减法运算规则得到本位的差及向高位的借位。

乘法运算

二进制的乘法运算规则为:

0X0=0

0X1=0

1X0=0

1X1=1

只有当两个1相乘时,积才为1,否则为0。两个二进制数相乘与两个十进制数相乘类似,而且更为简便:两个二进制数1101X1011其具体过程如下:

用乘数的每一位去乘被乘数,乘得中间结果的最低有效位与乘数相应位对齐,中间结果取决于乘数。若乘数位为0,则中间结果为0;若乘数位为1,则中间结果为被乘数,然后把这些中间结果全部加起来,即得乘积。

两个二进制数相乘时,乘数有几位,就有几个中间结果需同时进行相加,机器实现有困难为便于计算机中实现,常用边乘边移位相加的办法,即被乘数左移法或部分积右移法。

例如:乘数为1001,被乘数为1101,开始时部分积为0000,则运算步骤是

第一步,乘数最低位为1,部分积加被乘数,然后被乘数左移一位为11010

第二步,乘数位为0,不加被乘数,被乘数左移一位,即110100

第三步,数位为0,不加被乘数,被乘数左移一位,即1101000

第四步,乘数位为1,部分积加被乘数,得乘积1110101

由此可看出:两个n位数相乘,乘积为2n位。在计算过中,这2n位可能都要参加相加操作,所以需要2n个加法器

例如:乘数为1001,被乘数为1101,开始时部分积为0000,则运算步骤是

第一步,乘数最低位为1,部分积加被乘数,然后右移一位

第二步,乘数位为0,不加被乘数,部分积右移一位

第三步,乘数位为0,不加被乘数,部分积右移一位

第四步,乘数位为1,部分积加被乘数,部分积右移一位将得乘积

所以:1101 X 1001=01110101

所得结果相同。但只有n位有相加操作,只需n个加法器。所以,计算机中两个二进制数相乘时,普遍采用部分积右移法。

除法运算

因0不能作除数,所以二进制数的除法运算规则如下:

0÷1=0

1÷1=1

二进制的除法与十进制除法十分类似。从被除数的最高位开始检查,找出不少于除数的位数时,此位商1,然后选定的被除数减去除数,并把被除数的下一位移到余数上。若余数小于除数(不够减)商0,再把被除数的下一位移到余数上,若余数大于等于除数(够减)商1,余数减去除数再把被除数的下一位移到余数上,如此继续下去,直到全部被除数位移完为止。

即110110B÷110B=1001B。

拈加法

拈加法是二进制加、减、乘、除外的一种特殊算法。拈加法运算与加法类似但不需要做进位。此算法在博弈论(Game Theory)中被广泛利用。

计数系统

数制

数制即进位计数制,是基于统一规则用一组固定的数字符号表示数值的方法,数制包括两个重要概念—基数和位权。在计算机科学中,常见的数制有二进制(Binary)、八进制(Octal)、十进制(Decimal)和十六进制(十六进制数)。

数据来源:

常见的进制

计数系统是一种表示数量的信息方法,常见的计算系统除二进制外,有八进制、十进制、十六进制等。

八进制

八进制数的组成,八进制数由0,1,2……7八个数组成。八进制数的进借位规则,逢八进一、借一当八。定义为:按“逢八进一”的原则进行计数,称为八进制数,即每位上计满8时向高位进1。特点是:每个数的数位上只能是0、1、2、3、4、5、6、7八个数字;八进制数中最大数字是7,最小数字是0;基数为8。

十进制

十进制数的组成,由0,1,2……9共10个数组成。十进制数的进借位规则,逢十进一、借一当十。例如十进制数1280可以写为:1X103+2X102+8X101+0X100其中1、2、8、0均为权系数,103、102、101、100称为位权,而式子当中的10称为基数(因为十进制数),指数则指的是该位后十进制的位数。在实际应用的过程中,任何数制都可以按照加权系数展开。这里要特别注意的是基数是会跟随数制的变化而发生变化的,比如二进制数按加权系数展开时,基数应变为2,而不再是10。同时任何数制按权展开后将转换为十进制数。常见的数制有二、八、十、十六进制,因此各进制基数值分别是2、8、10和16。

十六进制

十六进制数的组成,十六进制数由0,1……9,A(10),B(11),C(12),D(13),E(14),F(15)十六个数组成。十六进制数的进借位规则,逢十六进一、借一当十六。定义为:按“逢十六进一”的原则进行计数,称为十六进制数,即每位上计满16时向高位进一。特点是:每个数的数位上只能是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F十六个数码:十六进制数中最大数字是F即15,最小数字是0;基数为16。实际上计算机科学中常用十六进制来表示二进制数串,因为计算机处理的二进制数比较长,如果用十六进制数来表示则缩短了数据位数,比较直观。

二进制与其他进制的转换

二进制与八进制的转换

23等于8,二进制数与八进制数有倍数关系,在将二进制数转换为八进制数时,采用3位二进制数换1位八进制数(简称:3位换1位)的方法。反之即采用1位换3位的方法。转换规则:从小数点开始向左右两边分组,三位一组,不足三位,以0补齐,每一组(三位二进制数)对应一位八进制基数。

如:(1101011)B=()O。

计算过程为:

解:(1101011)B=(153)O。

对于非整数的二进制数,应分成整数部分与纯小数部分分别加以转换。例如,八进制的基数R=8=23必须用三位二进制数来构成一位八进制数码,因此采用分组对应转换法。转换方法为:将二进制数转换成八进制数时,首先从小数点位置开始,向左或向右将二进制数的整数和小数部分每三位分为一组,不足三位的分别在整数的最高位前和小数的最低位后加“0”补足,然后写出每一组进制数所对应的八进制数码即可。

如:将二进制数(10110001.111)2转换成八进制数。

计算过程为: 补0

即二进制数(10110001.111)2转换成八进制数是(261.7)8。反过来,将每位八进制数分别用三位二进制数表示,就可完成八进制数到二进制数的转换。

八进制转换为二进制

八进制转换为二进制的方法与二进制与八进制的转换相反,二进制数转换为八进制数时,采用3位二进制数换1位八进制数(简称:3位换1位)的方法,八进制转换为二进制时则采用1位换3位的方法。

如:(153)O=()B。

计算过程为:

解:(153)O=(1101011)B。

数据来源:

二进制与十进制之间的转换

二进制转换为十进制

对于N进制数,每个位置上数据所代表的大小等于数据本身乘以位权,二进制数转换为十进制数即按照位权展开多项式求和的方法。如:将二进制数1010转换为十进制数。

如:(1010)B=()D。

解:(1010)B=1X23+0X22+1X21+0X20=8+0+2+0=(10)D。

十进制转换为二进制

对于十进制数转换为非十进制数,采用“除基取余法”,即十进制数不断除以基数,取每一次余数,直至商为0,然后将余数“自下而上”排列即可。

如:(25)D=()B。

计算过程为:

解:(25)D=(11001)B。

数据来源:

二进制与十六进制之间的转换

二进制转换成十六进制

由24=16可以分析得出这样的关系,四个二进制数相当于十六进制数的一位,即十六进制数的一位相当于二进制数的四位,这个关系就成为二、十六进制数相互转换的规则。转换规则:从小数点开始向左右两边分组,四位一组,不足三四位,以0补齐,每一组(四位二进制数)对应一位十六进制基数。

如:(1101011)B=()H。

计算过程为:

解:(1101011)B=(6B)H。

二进制数转换成十六进制数时,只要从小数点位置开始,向左或向右每四位二进制划分为一组(不足四位时可补0),然后写出每一组二进制数所对应的十六进制数码即可。

如:将二进制数(11011100110.1101)2转换成十六进制数

计算过程为: 补0

即二进制数(11011100110.1101)2转换成十六进制数是(6E6.D)16,反过来,将每位十六进制数分别用四位二进制数表示,就可完成十六进制数到二进制数的转换。

十六进制转换成二进制

同理,十六进制转换成二进制与二进制转换成十六进制相反,即采用1位换4位的方法。

 如:(E06D)H=()B。

计算过程为:

解:(E06D)H=(1110000001101101)B。

数据来源:

二进制与逻辑代数

二进制数码不仅可以表示数量的大小,像十进制数那样进行算术运算,还可以表示两种不同的逻辑状态,如开关的接通和断开、电平的高和低、真和假、命题的正确与否等,进行逻辑运算。当二进制数用于表示逻辑状态时,二进制数不再表示数值上的大小,数与数间的运算也不再是普通代数中的数值运算,而是对逻辑变量的逻辑运算。逻辑代数正是描述这些逻辑关系的一种数学方法。逻辑代数又称为布尔代数,其最基本的运算有与、或、非三种,有八个基本定律、五个常用公式和三个基本运算规则。

与运算

只有当决定事务结果的全部条件同时具备时,结果才会发生,这样的因果关系称为与逻辑。逻辑函数表达式为:

Y=AB

只有当输入A和B都为“1”时,逻辑输出Y才为“1”,其他情况都为“0”,即“全1出1,有0出0”。

或运算

在决定事物结果的诸条件中只要有一个满足,结果就会发生,这样的逻辑关系称为或逻辑。逻辑函数表达式为:

Y=A + B

只要逻辑输入A或B中有一个为“1”,输出Y就为“1”,而当输入全为“0”时,输出才为“0”,即“有1出1,全0出0”。

非运算

决定事物的条件具备了,结果却不发生,而此条件不具备时,结果一定发生,这样的因果关系叫非逻辑。逻辑函数表达式为:

Y=

非逻辑的输出总是输入的取反,即输入为“1”,输出为“0”;输入为“0”,输出为“1”。实际的逻辑问题往往比以上三种基本逻辑复杂得多,但它们都是由基本的与、或、非逻辑导出来的,因此称其为导出逻辑或复合逻辑。最常见的导出逻辑有与非、或非、与或非、异或以及同或等。

二进制字表示数据

一个二进制位只允许描述两种可能的值,所以单位的二进制变量本身的应用是很有限的,但可以通过将二进制定义为合适的组合方式,用二进制字来表示想要表示的任何事物。这是用二进制数来解决现实问题的关键所在。

例如,有N个二进制位的二进制字

Info=XN-1XN-2XN-3…X2X1X0

具有2N种可能组合,就可以表示2N种不同情形,也即数据信息。为方便起见,引进一些术语来处理二进制数组。一组二进制数通常被称为字,而不考虑它使用的二进制数的位数。上面的Info是用N位二进制位表示的字,根据系统的不同,一个字中位(bit)数可能很重要,也可能不重要。在微计算机领域,字节指的是8bit字。讨论二进制系统时,经常引进一些2的幂次方的缩写,概括如下图所示。

数据来源:

在用二进制数表示我们需要表达的事物时,首先要把二进制数定义为合适的方式,人为地赋予这些“0”“1”代码特定的含义。这种给二进制数组定义特定含义的过程称为编码。例如:当要用二进制字来表示红绿灯的通断状态时,可以采用两位二进制数D=D0D1来表示,定义D0位表示红绿灯,D1位表示通断状态,则编码如下:

00—红灯亮 01—红灯熄 10—绿灯亮 11—绿灯熄

D0和D1都是二进制位,且相互独立,上面D0表示红绿灯两种事物,D1表示灯的通断两种状态。这样,就把现实情形表达成了数字电路可以识别的“0”“1”代码,完成了编码过程。当需要表达现实世界中事物的不同情形时,只要有足够多的二进制位,任何情形都可以用二进制数组来表示,假设有m种情形,需要的二进制位为则n,则n为满足关系2n≥m的最小正整数。可见,编码为需要表达的现实情形和数字系统的数据信息提供了一个沟通的桥梁,使它们一一对应起来。这是用二进制数解决现实世界问题的关键所在。相反,数字系统处理完后,信息是以“0”“1”代码的形式输出的。要把处理结果返回给现实世界,就必须要将这些信息重新翻译成为人们可以理解的现实语言。这种把二进制数解释成应用的过程称为解码。一个系统的编解码过程如下图:

数据来源:

计算机领域广泛采用二进制的原因

当二进制用来表示大数的时候,书写起来比较长,但是对于电子计算机来说,二进制却非常方便,因为它有以下四个优点:

电路中容易实现

二进制只有两个数字符号“0”和“1”,所以计算机的设计只要找到一种具有两个稳定状态的元件即可。如果使用十进制就需要十个稳定状态的元件,使得技术困难、线路复杂、造价昂贵、可靠性低。当计算机工作的时候,电路通电工作,于是每个输出端就有了电压。电压的高低通过模数转换即转换成了二进制:高电平由1表示,低电平由0表示。也就是说将模拟集成电路转换为数字电路。这里的高电平与低电平可以人为确定,一般地,2.5V以下为低电平,3.2V以上为高电平。二进制数码只有两个—“0”和“1”。电路只要能识别低、高就可以表示“0”和“1”。

物理上最易实现存储

第二是用二进制来表示数可以尽量少用元件,对于某一个自然数m,如果用k进制来表示m时,位数为n,需要元件的总数为s,那么s=nk。以十进制自然数15为例,用十进制来表示需要10×2=20个元件;而用二进制来表示,只需要2×4=8个元件;二进制在物理上最易实现存储,通过磁极的取向、表面的凹凸、光照的有无等来记录。对于只写一次的光盘,将激光聚成1~2微米的小光束,依靠热的作用融化盘片表面上的合金薄膜,在薄膜上形成小洞(凹坑),记录下“1”,原来的位置表示记录“0”。

便于进行加、减运算和计数编码

第三是二进制的四则运算比较简单,只要记住加法和乘法的口诀各4个:0+0=0,0+1=1,1+0=1,1+1=10;0×0=0,0×1=0,1×0=0,1×1=1,可以大大提高运算速度;二进制与十进制数易于互相转换,简化运算规则。两个二进制数和、积运算组合各有三种,运算规则简单,有利于简化计算机内部结构,提高运算速度。数据在计算机中以器件的物理状态表示,采用二进制数字电路,计算机处理所有的字符或符号也要用二进制编码来表示用二进制的优点是容易表示,运算规则简单,节省设备。人们知道,具有两种稳定状态的元件(如晶体管的导通和截止,继电器的接通和断开,电脉冲电平的高低等)容易找到,而要找到具有10种稳定状态的元件来对应十进制的10个数就困难了。

便于逻辑判断(是或非)

第四是二进制方便进行各种逻辑运算。二进制的两个变量0和1,可以分别看成是真命题与假命题的逻辑值,从而进行二值逻辑运算。因为每位数据只有高低两个状态,当受到一定程度的干扰时,仍能可靠地分辨出它是高还是低。

二进制的优缺点

优点

二进制优点是所使用的符号最少,仅有0,1两个,表示简单且设备表示容易。比如,用灯“亮”表示“1”,“不亮”表示“0”;开关“开”表示“1”,“关”表示“0”,只要某个设备具有两种稳定状态,就可用来表征二进制数的两个状态;二进制运算简单,运算速度快,用电路实现容易;用二进制可以用逻辑代数作为工具进行逻辑分析、逻辑设计、简化电路,节省器件,降低造价。

缺点

二进制的缺点是与人们长期使用的十进制不同,写出的数字符号个数多、位数长,比如十进制的“9”用二进制表示则为“1001”。又由于数字符号仅有0、1两个,易于写错。

二进制的应用

用于计算机编码

二进制是计算机唯一能够识别的机器语言,电子计算机的通用语言都是二进制,在这样一个前提下,ASCII等编码技术逐渐出现。就计算机领域而言,数制转换通常涉及到十进制到二进制、十进制到十六进制、二进制到十六进制、二进制到十进制、十六进制到二进制、十六进制到十进制的转换以及ASCII码的生成等。

ASCII码—美国信息交换标准代码

计算机内存储的信息包括数值数据和非数值数据两类,非数值数据主要包括文字、图片、声音等;在计算机中,各种信息都是以二进制编码的形式存在的,即都是以0和1组成的二进制代码表示的。本文讨论了各种非数值数据的表示形式。字符的编码采用国际通用的ASCII码(American Standard Codefor Information Interchange,美国信息交换标准代码),ASCII码用一个字节编码,可表示256(28)个不同字符。当用户从键盘敲入A时存储到计算机内部的是A的ASCII:01000001,这个转换工作由输入设备完成,键盘、鼠标是最常用的输入设备。

ASCII码使用指定的7位或8位二进制数组合来表示128或256种可能的字符。ASCII码使用7位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0到9、标点符号,以及在英语中使用的特殊控制字符。其中,第0~32号和第127号是不可见的,但它们都有一些特殊功能,所以称为控制字符。第33~126号是字符,其中第48~57号为0~9十个阿拉伯数字,65~90号为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。

汉字编码

1980年,中国颁布的《信息交换用汉字编码字符集—基本集》,即国家标准GB2312—80方案中规定用两个字节的16位二进制表示1个汉字,每个字节都只使用低7位(与ASCII码相同),即有128×128=16384种状态。但国标码GB2312不能直接在计算机中使用,比如“大”的国标码时3473H,与字符组合“4S”的ASCII相同,为了能区分汉字与ASCII码,在计算机内部表示汉字时把交换码(国标码)两个字节最高位改为1,称为“机内码”。这样:汉字“大”在计算机内部存储的是它的机内码:1011010011110011。

其他应用

计算机是信息处理的工具。但是,任何形式的信息,不论是数字、文字、声音、图形,还是其他类型的信息,它们都必须转换成二进制形式的表示后,才能由计算机进行处理、存储和传输,诸如加密解密算法、格式存储、网络通信、图形与图像等领域。

二进制流的加密解密算法

二进制流的加解密算法可以用任意序列作为密钥,不同于传统的流密码是基于一些原理生成伪随机密钥,二进制流的加密解密算法设计极其简单,它把一组任意长度的二进制流作为密钥,把密钥对应位置(0或1)的明文信息(0或1)重新排列到密文空间中,如此循环,直至加密完成。

传统流密码的加解密过程图解如下图:

二进制流加解密图解过程图解如下图:

数据来源:

二进制格式存储

二进制文件是指以二进制模式存储在内存中的文件。这类文件无法使用文本编辑器复制二进制文件的内容。二进制文件通常具有处理速度快、占用空间少等优点。Python同样支持二进制文件的打开、关闭、读取、写入等基本的操作函数。

二进制网络通信

网络上用于数据传输的基本单位是数据包(packet)物理层和数据路层的分组也称为帧(frame)。网络媒体(network medium)本质上就是在各种设备之间的光、电连接。要能够在网络媒体上传输数据,首先要用某种编码方法将其转换成以电流或光脉冲表示的二进制位。网络都包括以下几个部分:第一是用以在网络设备间实现信号传输的物理媒体;第二是由一组标准的二进制位组成的数据包或结构;第三是一组媒体访问控制规则,多个网络设备通过它来控制对共享网络媒体的访问。

图形与图像

人类视觉系统所感知的信息形式或人们心目中的有形想象都称为图像。无论是图形,还是文字、影像视频等,最终都是以图像形式出现的。其中图像深度是指一幅位图图像中最多使用的颜色数。由于每个像素上的颜色被量化后将用颜色值来表示,所以在位图图像中每个像素所占位数就被称为图像深度。若每个像素只有一位颜色位则该像素只能表示亮或暗,这就是二值图像。若每个像素有8位颜色位,则在一副图像中可以有28=256种不同的颜色,若每个像素具有16位颜色位,则可使用的颜色数达216=65536种,显示深度表示显示器上每个点用于显示颜色的二进制数字位数。若显示器的显示深度小于数字图像的深度,就会使数字图像颜色的显示失真。

数据来源:

参考资料