二进制代码
二进制代码:由两个基本字符'0'、'1'组成的代码。其中,码元:"一位"二进制代码。码字:N个码元可以组成的不同组合,任意一个组合称一个码字二进制编码:用不同码字表示不同的信息的方法就叫二进制编码。如用1111表示15。区别例子:对15进行二进制编码的结果为1111,共需要4位二进制代码。二进制代码指令:是机器语言的指令集体系结构的表示方式。好比"加"在汇编中用add表示,类似的在这个中则是用1100表示(1100只是举例用,实际不是)机器语言:又称机器码,是用"二进制代码指令"表达(不是二进制代码)的计算机语言
中文名:二进制代码
外文名:binarycode
1、基本概念
二进制代码,顾名思义,由两个基本字符0,1组成的代码。
二进制代码运算规律是逢二进一。比如十进制1,二进制也是1;但是十进制2(1+1),二进制为10;十进制3(1+1+1),二进制为11;十进制4,二进制为100,以此类推……也就是说,用二进制做十进制的加法时是逢二进一。
为区别于其它进制代码,二进制代码的书写通常在数的右下方注上基数2,或加后面加B表示如(10110001)2。
二进制代码语言或称为机器语言,计算机可以直接识别,不需要进行任何翻译的语言。每台机器的指令,其格式和代码所代表的含义都是硬性规定的,故称之为面向机器的语言,也称为机器语言。它是第一代的计算机语言,机器语言对不同型号的计算机来说一般是不同的。
直接用二进制代码指令表达的计算机语言,指令是用0和1组成的一串代码,它们有一定的位数,并分成若干段,各段的编码表示不同的含义,例如某台计算机字长为16位,即有16个二进制数组成一条指令或其它信息。16个0和1可组成各种排列组合,通过线路变成电信号,让计算机执行各种不同的操作。
1.大量繁杂琐碎的细节牵制着程序员,使他们不可能有更多的时间和精力去从事创造性的劳动,去执行对他们来说更为重要的任务。如确保程序的正确性、高效性。
2.二进制代码语言程序员既要驾驭程序设计的全局又要深入每一个局部直到实现的细节,即使智力超群的程序员也常常会顾此失彼,屡出差错,因而所编出的程序可靠性差,且开发周期长。
3.由于用二进制代码语言进行程序设计的思维和表达方式与人们的习惯大相径庭,只有经过较长时间职业训练的程序员才能胜任,使得程序设计曲高和寡。
4.因为它的书面形式全是"密"码,所以可读性差,不便于交流与合作。
5.因为它严重地依赖于具体的计算机,所以可移植性差,重用性差。
2、发展历史
在早期设计的机械计算装置中,使用的不是二进制,而是十进制或者其他进制,利用齿轮的不同位置表示不同的数值,这种计算装置更加接近人类的思想方式。
比如说一个计算设备有十个齿轮,它们接连起来,每一个齿轮有十格,小齿轮转一圈大齿轮走一格。这就是一个简单的十位十进制的数据表示设备了,可以表示0到999999999的数字。配合其他的一些机械设备,这样一个简单的基于齿轮的装置就可以实现简单的十进制加减法了。
这种通过不同的位置上面不同的符号表示数值的方法就是进制表示方法。
常用的进制主要是十进制(因为我们有十个手指,所以十进制是比较合理的选择,用手指可以表示十个数字,0的概念直到很久以后才出现,所以是1-10而不是0-9)。
电子计算机出现以后,使用电子管来表示十种状态过于复杂,所以所有的电子计算机中只有两种基本的状态,开和关。也就是说,电子管的两种状态决定了以电子管为基础的电子计算机采用二进制来表示数字和数据。
常用的进制还有8进制和16进制,在电脑科学中,经常会用到16进制,而十进制的使用非常少,这是因为16进制和二进制有天然的联系:4个二进制位可以表示从0到15的数字,这刚好是1个16进制位可以表示的数据,也就是说,将二进制转换成16进制只要每4位进行转换就可以了。二进制的“00101000”直接可以转换成16进制的“28”。
字节是由8位组成的存储单元,是计算机中最小的存储单位。计算机具有不同的字,字具有不同的位数,字长就是用来表示字的位数的,字长是计算机处理数据的能力,即一个时刻可以处理的数据位数。现代电脑的字长一般是32位、64位。
对于32位字长的现代电脑,一个字等于4个字节,对于早期的16位的电脑,一个字等于2个字节。
3、内容移植
一种新处理器的流行,离不开相应软件的支持。开发新的处理器可能会因为失去相应软件的支持而影响其推广应用和市场前景;另一方面,得不到广泛应用和一定市场份额的处理器也很难得到丰富的软件支持。这种处理器和支持软件之间相互钳制的关系,既使得新处理器的设计不得不考虑兼容老处理器,也阻碍了新处理器的推出。在这种情况下,研究如何把支持老处理器的软件移植到新的处理器上,使新的处理器从诞生之初就有丰富的软件,不仅对软件重用有重大意义,更可以开阔处理器研发的思路,促进新处理器的创新。
一般有三种方法可以把老处理器上的代码移植到新处理器上:
1.在新处理器上提供专门的运行模式来执行老代码,如英特尔的安腾(Itanium)处理器专门设计了执行x86代码的硬件。
2.把源程序重新编译到新的指令集。
3.使用软件方法,解释或翻译应用程序。
第一种方法,显然无法利用新处理器的一些先进特性,失去了开发新处理器的意义,并且增加了新处理器的硬件复杂度,甚至还会影响原有代码的执行效率。
第二种方法可以达到很好的效率,但并不总是可行,因为有些程序已经没有源代码,有些程序依赖于共享代码库,而这些共享代码以目标代码形式出现,不一定能得到源码,有些源程序语言没有编译到新指令集的编译器,此外操作系统的差异还可能使得只有修改源代码才能重新编译这些例程(比如与图形相关的代码)。
因此第三种方法,称之为二进制翻译(BinaryTranslation)应运而生。它是一种直接翻译可执行二进制程序的技术,能够把一种处理器上的二进制程序翻译到另外一种处理器上执行。它使得不同处理器之间的二进制程序可以很容易地相互移植,扩大了硬件/软件的适用范围,有助于打破前面提到的处理器和支持软件之间互相掣肘影响创新的局面。
二进制翻译也是一种编译技术,它与传统编译的差别在于其编译处理对象不同。传统编译处理的对象是某一种高级语言,经过编译处理生成某种机器的目标代码;而二进制翻译处理的对象是某种机器的二进制代码,该二进制代码是经过传统编译生成的,经过二进制翻译处理后生成另一种机器的二进制代码。按照传统编译程序前端、中端和后端的划分,我们可以理解为二进制翻译是拥有特殊前端的编译器。
4、数制扩展
数制是人们利用符号进行计数的科学方法。数制有很多种,在计算机中常用的数制有:十进制,二进制、八进制和十六进制。
人们通常使用的是十进制。
形式:有0,1,2….9十个基本字符组成
运算规律:十进制数运算是按“逢十进一”的规则进行的.
在计算机中,除了十进制数外,经常使用的数制还有二进制数和十六进制数.在运算中它们分别遵循的是逢二进一和逢十六进一的法则.
形式:它由两个基本字符0,1组成、
运算规律:二进制数运算规律是逢二进一。
为区别于其它进制数,二进制数的书写通常在数的右下方注上基数2,或加后面加B表示。
1)二进制数中只有两个字符0和1,表示具有两个不同稳定状态的元器件。例如,电路中有,无电流,有电流用1表示,无电流用0表示。类似的还比如电路中电压的高,低,晶体管的导通和截止等。
2)二进制数运算简单,大大简化了计算中运算部件的结构。
二进制数的运算
二进制数的加法和乘法运算如下:
0+0=00+1=1+0=11+1=10
0×0=00×1=1×0=01×1=1
缺点
采用二进制计数制,对于计算机等数字系统来说,运算、存储和传输极为方便,然而,二进制数书写起来很不方便。为此人们经常采用八进制计数制和十六制计数制进行书写或打印。
运算规律:逢八进一。
形式:它由十六个字符0~9以及A,B,C,D,E,F组成(它们分别表示十进制数0~15)
运算规律:十六进制数运算规律是逢十六进一。
例如:十六进制数4AC8可写成(4AC8)16,或写成4AC8H。
一个十进制数110,其中百位上的1表示1个10^2,既100,十位的1表示1个10^1,即10,个位的0表示0个10^0,即0。
一个二进制数110,其中高位的1表示1个2^2,即4,低位的1表示1个2^1,即2,最低位的0表示0个2^0,即0。
一个十六进制数110,其中高位的1表示1个16^2,即256,低位的1表示1个16^1,即16,最低位的0表示0个16^0,即0。
可见,在数制中,各位数字所表示值的大小不仅与该数字本身的大小有关,还与该数字所在的位置有关,我们称这关系为数的位权。
十进制数的位权是以10为底的幂,二进制数的位权是以2为底的幂,十六进制数的位权是以16为底的幂。数位由高向低,以降幂的方式排列。
5、进制转换
二进制数、八进制数、十六进制数转换为十进制数的规律是相同的。把二进制数(或十六进制数)按位权形式展开多项式和的形式,求其最后的和,就是其对应的十进制数——简称“按权求和”.
例1:把(1001.01)2转换为十进制数。
解:(1001.01)2
=1×23+0×22+0×21+1×20+0×2-1+1×2-2
=8+0+0+1+0+0.25
=9.25
例2.把(38A.11)16转换为十进制数
解:(38A.11)16
=3×162+8×16+10×160+1×16-1+1×16-2
=768+128+10+0.0625+0.0039
=906.0664
一、一个十进制整数转换为二进制整数通常采用除二取余法,即用2连续除十进制数,直到商为0,逆序排列余数即可得到――简称除二取余法.
例:将25转换为二进制数
解:25÷2=12余数1
12÷2=6余数0
6÷2=3余数0
3÷2=1余数1
1÷2=0余数1
所以25=(11001)2
二、同理,把十进制数转换为八进制数、十六进制数时,将基数2转换成8和16就可以了.
例:将25转换为十六进制数
解:25÷16=1余数9
1÷16=0余数1
所以25=(19)16
(1)十六进制数转换成二进制数,只要将每一位十六进制数用对应的4位二进制数替代即可――简称位分四位.
例:将(4AF8B)16转换为二进制数.
解:4AF8B
01001010111110001011
所以(4AF8B)16=(1001010111110001011)2
(2)二进制数转换为十六进制数,分别向左,向右每四位一组,依次写出每组4位二进制数所对应的十六进制数――简称四位合一位.
例:将二进制数(111010110)2转换为十六进制数.
解:000111010110
1D6
所以(111010110)2=1D6H
转换时注意最后一组不足4位时必须加0补齐4位
WindowsXP自带的计算器
注:在WindowsXP自带的计算器中对表示范围进行了限制,“字节”,只能表示到十进制的255,也就是8个1,“单字”,最多可以表示16个1,“双字”,最多可表示32个1,“四字”,最多表示64个1.
6、通用二进制
通用二进制(Universalbinary)是苹果电脑公司提出的一种程序代码,使程序能以本地程序的形式运行在使用PowerPC或者英特尔微处理器(x86)的麦金塔电脑上,在同一个程序包中同时为两种架构提供最理想的性能。硬件方面,苹果电脑公司已经将其产品线上的所有麦金塔电脑在2006年内转为英特尔处理器,相对应的软件方面,苹果最早是在2005年苹果电脑全球研发者大会上就发布了通用二进制的内容来适应这种转换。
当程序在操作系统中运行后,将自动检测通用二进制代码,然后根据使用的架构自动选择合适的代码来执行,因此实现无损的本地程序运行速度。
推荐阅读