二进制数据的表示法二进制数据也是采用位置计数法,其位权是以2为底的幂。例如二进制数据110.11,逢2进1,其权的大小顺序为22、21、20、2-1、2-2。对于有n位整数,m位小数的二进制数据用加权系数展开式表示,可写为:(a(n-1)a(n-2)...a0...a(-m))2=a(n-1)*2(n-1)+a(n-2)*2(n-2)+...a*2(0)...+a(-m)*2(-m)二进制数据一般可写为:(a(n-1)a(n-2)…a(1)a(0).a(-1)a(-2)…a(-m))2。注意:1.式中aj表示第j位的系数,它为0和1中的某一个数。2.a(n-1)中的(n-1)为下标,输入法无法打出所以用括号括住,避免混淆。3.2^2表示2的平方,以此类推。【例1102】将二进制数据111.01写成加权系数的形式。解:(111.01)2=(1×2^2)+(1×2^1)+(1×2^0)+(0×2^-1)+(1×2^-2)二进制和十六进制,八进制一样,都以二的幂来进位的。二进制运算二进制数据的算术运算的基本规律和十进制数的运算十分相似。最常用的是加法运算和乘法运算。1.二进制加法运算有四种情况:0+0=00+1=11+0=11+1=10ps:0进位为1【例1103】求(1101)2+(1011)2的和解:1101+1011-------------------110002.二进制乘法运算有四种情况:0×0=01×0=00×1=01×1=1【例1104】求(1110)2乘(101)2之积解:1110×101-----------------------111000001110-------------------------1000110(这些计算就跟十进制的加或者乘法相同,只是进位的数不一样而已,十进制的是到十才进位这里是到2就进了)3.二进制减法0-0=0,1-0=1,1-1=0,10-1=1。4.二进制除法0÷0=0,0÷1=0,1÷1=1,1÷0=0(无意义)5.二进制拈加法拈加法二进制加减乘除外的一种特殊算法。拈加法运算与进行加法类似,但不需要做进位。此算法在博弈论(GameTheory)中被广泛利用计算机中的十进制小数转换二进制计算机中的十进制小数用二进制通常是用乘二取整法来获得的。比如0.65换算成二进制就是:0.65*2=1.3取1,留下0.3继续乘二取整0.3*2=0.6取0,留下0.6继续乘二取整0.6*2=1.2取1,留下0.2继续乘二取整0.2*2=0.4取0,留下0.4继续乘二取整0.4*2=0.8取0,留下0.8继续乘二取整0.8*2=1.6取1,留下0.6继续乘二取整0.6*2=1.2取1,留下0.2继续乘二取整.......一直循环,直到达到精度限制才停止(所以,计算机保存的小数一般会有误差,所以在编程中,要想比较两个小数是否相等,只能比较某个精度范围内是否相等)。这时,十进制的0.65,用二进制就可以表示为:1010011。还值得一提的是,在目前的计算机中,除了十进制是有符号的外,其他如二进制、八进制、16进制都是无符号的。在现实生活和记数器中,如果表示数的“器件”只有两种状态,如电灯的“亮”与“灭”,开关的“开”与“关”。一种状态表示数码0,另一种状态表示数码1,1加1应该等于2,因为没有数码2,只能向上一个数位进一,就是采用“满二进一”的原则,这和十进制是采用“满十进一”原则完全相同。1+1=10,10+1=11,11+1=100,100+1=101,101+1=110,110+1=111,111+1+=1000,……可见二进制的10表示二,100表示四,1000表示八,10000表示十六,……。二进制同样是“位值制”。同一个数码1,在不同数位上表示的数值是不同的。如11111,从右往左数,第一位的1就是一,第二位的1表示二,第三位的1表示四,第四位的1表示八,第五位的1表示十六。所谓二进制,也就是计算机运算时用的一种算法。二进制只由一和零组成。二进制是世界上第一台计算机上用的算法,最古老的计算机里有一个个灯泡,当运算的时候,比如要表达“一”,第一个灯泡会亮起来。要表达“二”,则第一个灯泡熄灭,第二个灯泡就会亮起来。二进制就是等于2时就要进位。0=000000001=000000012=000000103=000000114=000001005=000001016=000001107=000001118=000010009=0000100110=00001010……即是逢二进一,二进制广泛用于最基础的运算方式,计算机的运行计算基础就是基于二进制来运行。只是用二进制执行运算,用其他进制表现出来。其实把二进制三位一组分开就是八进制,四位一组就是十六进制。进制转换十进制数转换为二进制数、八进制数、十六进制数的方法:二进制数、八进制数、十六进制数转换为十进制数的方法:按权展开求和法1.二进制与十进制间的相互转换:(1)二进制转十进制方法:“按权展开求和”例:(1011.01)2=(1×2^3+0×2^2+1×2^1+1×2^0+0×2^(-1)+1×2^(-2))10=(8+0+2+1+0+0.25)10=(11.25)10规律:个位上的数字的次数是0,十位上的数字的次数是1,......,依次递增,而十分位的数字的次数是-1,百分位上数字的次数是-2,......,依次递减。注意:不是任何一个十进制小数都能转换成有限位的二进制数。(2)十进制转二进制十进制整数转二进制数:“除以2取余,逆序排列”(除二取余法)例:(89)10=(1011001)289÷2……144÷2……022÷2……011÷2……15÷2……12÷2……01十进制小数转二进制数:“乘以2取整,顺序排列”(乘2取整法)例:(0.625)10=(0.101)20.625X2=1.25……10.25X2=0.50……00.50X2=1.00……12.八进制与二进制的转换:二进制数转换成八进制数:从小数点开始,整数部分向左、小数部分向右,每3位为一组用一位八进制数的数字表示,不足3位的要用“0”补足3位,就得到一个八进制数。八进制数转换成二进制数:把每一个八进制数转换成3位的二进制数,就得到一个二进制数。八进制数字与二进制数字对应关系如下:000-0100-4001-1101-5010-2110-6011-3111-7例:将八进制的37.416转换成二进制数:37.416011111.100001110即:(37.416)8=(11111.10000111)2例:将二进制的10110.0011转换成八进制:010110.00110026.14即:(10110.011)2=(26.14)83.十六进制与二进制的转换:二进制数转换成十六进制数:从小数点开始,整数部分向左、小数部分向右,每4位为一组用一位十六进制数的数字表示,不足4位的要用“0”补足4位,就得到一个十六进制数。十六进制数转换成二进制数:把每一个十六进制数转换成4位的二进制数,就得到一个二进制数。十六进制数字与二进制数字的对应关系如下:0000-00100-41000-81100-C0001-10101-51001-91101-D0010-20110-61010-A1110-E0011-30111-71011-B1111-F例:将十六进制数5DF.9转换成二进制:5DF.9010111011111.1001即:(5DF.9)16=(10111011111.1001)2例:将二进制数1100001.111转换成十六进制:01100001.111061.E即:(1100001.111)2=(61.E)16二进制、十六进制、十进制的快速转换8421法记住8421,对于任意一个4位的二进制数,我们都可以很快算出它对应的10进制值。下面列出四位二进制数xxxx所有可能的值(中间略过部分)仅4位的2进制数快速计算方法十进制值十六进值1111=8+4+2+1=15F1110=8+4+2+0=14E1101=8+4+0+1=13D1100=8+4+0+0=12C1011=8+0+2+1=11B1010=8+0+2+0=10A1001=8+0+0+1=99....0001=0+0+0+1=10000=0+0+0+0=00二进制数要转换为十六进制,就是以4位一段,分别转换为十六进制。如(上行为二制数,下面为对应的十六进制):11111101,10100101,10011011FD,A5,9B反过来,当我们看到FD时,如何迅速将它转换为二进制数呢?先转换F:看到F,我们需知道它是15(可能你还不熟悉A~F这五个数),然后15如何用8421凑呢?应该是8+4+2+1,所以四位全为1:1111。接着转换D:看到D,知道它是13,13如何用8421凑呢?应该是:8+4+1,即:1101。所以,FD转换为二进制数,为:11111101由于十六进制转换成二进制相当直接,所以,我们需要将一个十进制数转换成2进制数时,也可以先转换成16进制,然后再转换成2进制。比如,十进制数1234转换成二制数,如果要一直除以2,直接得到2进制数,需要计算较多次数。所以我们可以先除以16,得到16进制数:被除数计算过程商余数12341234/167727777/16413(D)44/1604结果16进制为:0x4D2然后我们可直接写出0x4D2的二进制形式:010011010010。其中对映关系为:0100--41101--D0010--2同样,如果一个二进制数很长,我们需要将它转换成10进制数时,除了前面学过的方法是,我们还可以先将这个二进制转换成16进制,然后再转换为10进制。下面举例一个int类型的二进制数:01101101111001011010111100011011我们按四位一组转换为16进制:6DE5AF1B原码、反码、补码在计算机内,定点数有3种表示法:原码、反码和补码。原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。原码10010=反码11101(10010,1为符号码,故为负)(11101)二进制=-13十进制补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。1、原码、反码和补码的表示方法(1)原码:在数值前直接加一符号位的表示法。例如:符号位数值位[+7]原=00000111B[-7]原=10000111B注意:a.数0的原码有两种形式:[+0]原=00000000B[-0]原=10000000Bb.8位二进制原码的表示范围:-127~+127反码(2)反码:正数:正数的反码与原码相同。负数:负数的反码,符号位为“1”,数值部分按位取反。例如:符号位数值位[+7]反=00000111B[-7]反=11111000B注意:a.数0的反码也有两种形式,即[+0]反=00000000B[-0]反=11111111Bb.8位二进制反码的表示范围:-127~+127补码(3)补码的表示方法1)模的概念:把一个计量单位称之为模或模数。例如,时钟是以12进制进行计数循环的,即以12为模。在时钟上,时针加上(正拨)12的整数位或减去(反拨)12的整数位,时针的位置不变。14点钟在舍去模12后,成为(下午)2点钟(14=14-12=2)。从0点出发逆时针拨10格即减去10小时,也可看成从0点出发顺时针拨2格(加上2小时),即2点(0-10=-10=-10+12=2)。因此,在模12的前提下,-10可映射为+2。由此可见,对于一个模数为12的循环系统来说,加2和减10的效果是一样的;因此,在以12为模的系统中,凡是减10的运算都可以用加2来代替,这就把减法问题转化成加法问题了(注:计算机的硬件结构中只有加法器,所以大部分的运算都必须最终转换为加法)。10和2对模12而言互为补数。同理,计算机的运算部件与寄存器都有一定字