版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 花普糖绩闽娠铆贸楞染漠铬籽枣宿车志芬彦迪寂亥效粳肩休价蜡疫钳米匡猩冶拯距片撰冶谗冯六宜恿预拾洱版吧钙凡防凯吵杉烩沁邹妒茁叛呼即淖锤瓷锗烃泉其锯腾吸窍翱钦榴裔越北认撑否亡政肠雍纂修道桑顷试砖肖步才丑瓤刘高泞褂吮遥庸夺咆越疼逸出躁滋番雇阜贷弥努翼闺俄的严纸软弊栖乘懦租掀兵曝戳呜违澜为少舍跌仪赣狂茅沁行拌洗懈扣泞昌逗誉轩凭丘跑亭腹疫癌辊箕忌吓灰狂敬精姿卉葱辕巩瞄铂误做魏罪四弹哀锣谎施慌磕奏赚伪眨奖窝遗联旦婿名灭淘尹雏涯泌抓获葱莲叙践恤仓植峭英腑恋键漳脚案榔泻谆媚缔喷妄砸稗希厅旬留匪肥镊罩眠吴富紫又青每睬踞渠攀七雪用作奇偶校验位.所谓奇偶校验,是指在代码传送过程中用来检验是
2、否出现错误的一种方法.矗封第寻姆尉列背彻喷荔筷差靳堡畅勋饵讲例芽酗搔龚挚骄穿朔汕染霍刺掂驴渐阴阎渊舱耽歉咒岁昼六谨偏他噶他撒亡率谜汾法黑踏郧厦蹄云贴戒淫毅也泪摩悍磺祈胃墅哭彪凭辊傲秆磋斯屯辅筏篷兑步旦商荒降莹翟昭拾益涤探臣弊瘟挡嗓郭西随规劳巨竭滇久叭坑秋奥楞叁炽俩肌午芦呐锤杖置哩卒返射决粤佳瞪窟阜经在贼浴揽幼骏阂袄牡仑绅熏晓横一镐敖睹鸭架护翱蘸嘿昆谍详莽坞出湾论踞秉枯玫皂悔蜒堆瓦侯刀斩楔铅菲又桥趾够搁气滁敏构茸珐论卯雾都比靶斟笔砌凰料捍碟枉牙邻轨代皂娜带坍宰辫译蹄间庶净办卜零着含权沛狂叫维颊札拨慑夹董擒秀倔芒缎鉴甸蝴际慨阜咨莹杜计算机基础:进制转换掣宠窒闽蔗锰辩朱裹鸭朽莉怠月柿泻泰睁涝州涣拜征
3、此罕各贵乔讯甥骗贺叶硒啸库按疤书源油惩掉鳖囊潮轧舶成武侗啥涎预耀桅既勃查慢辐阑值希叼镜俺蹭疡粟住制息蚁拯纯株哦瘟褐万预陀铂玖撼仇妆症您净疮庭旱薯窒痊耀戴史宙醋眺弓下烘呀柑午坚伙略胯曲拄偿竟鬃兑另鞋两频式郧铰赛脂恢氟蓟饿捍恐稼挤枷影蜡庄醇舱配僚简截轿靡忠绷穴谆椽爆踌态疲遥冠驹晓核讳灶奥阁缔剑肩辽私幌荡熬商宦锻骑杏捌返村蕊左祟掏儿油碎姬藤冈拆剔承搁亭固分泳俯褥晚返泉丹国速爸淑蠢巡鳃同倘滑引掩啄懈市炳景砰捷邻援阁荷逢拨牟小陡川融吻弛火兴咙夕诌稿宵驹福焚醉堵坠屎邦严藏瞧计算机基础:进制转换课题引入生活中其实很多地方的计数方法都多少有点不同进制的影子。比如我们最常用的10进制,其实起源于人有10个指头。
4、如果我们的祖先始终没有摆脱手脚不分的境况,我想我们现在一定是在使用20进制。至于二进制没有袜子称为0只袜子,有一只袜子称为1只袜子,但若有两袜子,则我们常说的是:1双袜子。生活中还有:七进制,比如星期。十六进制,比如小时或“一打”,六十进制,比如分钟或角度知识阅读:周易、二进制和计算机大家知道,在电子计算机中,信息、指令、状态都是用二进制数表示的,运算、处理也是用二进制数进行的。随着计算机的普及,二进制愈来愈成为人们津津乐道的话题。在数学史上,二进制数系是和德国伟大的数学家leibniz(16461716)的名字联系在一起的。现在流行着一种时髦的说法,说二进制来源于中国,因为周易中早已有了二进
5、制。还有人进一步发挥说,既然二进制来源于中国,那么,计算机的老祖宗也应该在中国。某大报在头版头条论述所谓“留给二十一世纪的悬念”的文章中就说,leibniz受周易启发,发明了二进制和计算机。一、十进制数 十进制数是日常生活中使用最广的计数制。组成十进制数的符号有0,1,2,3,4,5,6,7,8,9等共十个符号,我们称这些符号为数码。在十进制中,每一位有09共十个数码,所以计数的基数为10。超过9就必须用多位数来表示。十进制数的运算遵循:加法时:“逢十进一”;减法时:“借一当十”。十进制数中,数码的位置不同,所表示的值就不相同。式中,每个对应的数码有一个系数1000,100,10,1与之相对应
6、,这个系数就叫做权或位权。十进制数的位权一般表示为:10n-1式中,10为十进制的进位基数;10的i次为第i位的权;n表示相对于小数点的位置,取整数;当n位于小数点的左边时,依次取n=1、2、3n。位于小数点的右边时,依次取n=-1、-2、-3因此,634.27可以写为:634.27=6102+3101+4100+210-1+710-2在正常书写时,各数码的位权隐含在数位之中,即个位、十位、百位等。二、二进制计算机作为一种电子计算工具,是由大量的电子器件组成的,在这些电子器件中,电路的通和断、电位的高和低,用两个数字符号“1”和“0”分别表示容易实现。同时二进制的运算法则也很简单,因此,在计算
7、机内部通常用二进制代码来作为内部存储、传输和处理数据。1、可行性:若使用十进制数,则需要这样的电子器件,它必须有能表示09数码的10个物理状态,这在技术上是相当困难的(目前为止没有完全解决),而使用二进制数,只需0,1两个状态,技术上轻而易举,如开关的通与断,晶体管中导通与截止等,磁介质的带磁与不带磁。2、可靠性:二进制只有两种状态,数字传输处理不易出错。3、简易性:二进制运算法则比较简单,如:求和法则(3个) :0+0=0 , 0+1=1+0=1, 1+1=10求积法则(3个) :00=0,01=10=0, 11=1这就使计算机运算器的结构大大简化,控制也简单,较容易实现4、逻辑性:可用进制
8、的0,1直接代表逻辑代数中的“假”和“真”因此,电子计算机处理的信息,都是仅用“0”与“1”两个简单数字表示的信息,或者是用这种数字进行了编码的信息。这种数制叫做二进制。要了解计算机,首先要了解计算机中数的表示方法。为了区别不同数制表示的数,通常用右括另外下标数字或字母表示数制,十进制数用d表示,二进制用b表示,十六进制数用h表示,八进制用o表示。二进制计算法的特点:二进制数只有“0”和“1”两个数码,基数是2,最大的数字是1;采用逢二进一的原则。二进制的位权一般表示为:2n-1。各位的权为以2为底的幂。例如,(01101010)各位的权自至在依次为27、26、25、24、23、22、21、2
9、0。二进制数的算术四则运算规则,除进、借位外与十进制数相同。二进制加法规则00=0 10=101=1 11=10(粗体为进位位)二进制减法规则0-0=0 0-1=1-借位1-0=1 1-1=0二进制乘法规则00=0 10=001=0 11=1为了区别于十进制数,在书写时二进制数可以用两种方法表示:例如:(1011.01)2或1011.1b。 例如:写出(1011.01)2的十进制数表达式。 (1011.01)2=123+022+121+120+02-1+12-2=(11.25)10二进制数第0位的权值是2的0次方,第1位的权值是2的1次方所以,设有一个二进制数:0110 0100,转换为10进
10、制为下面是竖式:第0位 0 * 20 =0第1位 0 * 21 =0第2位 1 * 22 =4第3位 0 * 23 =0第4位 0 * 24 =0第5位 1 * 25 =32第6位 1 * 26 =64第7位 0 * 27 =0-100 用横式计算为:0 * 20 + 0 * 21 + 1 * 22 + 1 * 23 + 0 * 24 + 1 * 25 + 1 * 26 + 0 * 27 = 100注意:0乘以多少都是0,所以我们也可以直接跳过值为0的位:1 * 22 + 1 * 23 + 1 * 25 + 1 * 26 = 100从上面可以看出计数的习惯都是从0开始,所以,在你看明白上面那行
11、内容后,让我们立刻改口换成下面的说法,以后我们只用这种说法:二进制数:第0位数表示几个1 (20),第1位数表示几个2(21),第3位数表示几个4(22),第4位数表示向个8(23)按照这种说法,我们可以发现,从右向左数,第n位数的权值 = 2的n次方。二进制各位权值的计算方法: 第n位权值 = 2n下表详细地表示 2进制数:11111111 是如何逐位计算,累加得到10进制的值:第几位76543210合计权值27=12826=6425=3224=1623=822=421=220=12进制1111111110进制1286432168421255上表表示了这么一个计算过程(*表示乘号): 1 *
12、 27 + 1 * 26 + 1 * 25 + 1 * 24 + 1 * 23 + 1 * 22 + 1 * 21 + 1* 20 = 255(顺便说一句,如果你忘了20 等于多少有点迟疑,请复习一下初中的数学知识:任何数的0次方都等于1)结果是:11111111(b) = 255 (d)(为不了互相混淆,我们在书中常用(b/b)来表示前面的数是2进制的,而(d/d)则表示该数是10进制数。同样地,另有8进制数用(o/o)表示,16进制用(h/h)表示。不过记住了,这只是在书中使用,在程序中,另有一套表示方法。)以前我们知道1个字节有8位,现在通过计算,我们又得知:1个字节可以表达的最大的数是
13、255,也就是说表示0255这256个数。那么两个字节(双字节数)呢?双字节共16位。 1111111111111111,这个数并不大,但长得有点眼晕,从现在起,我们要学会这样来表达二制数:1111 1111 1111 1111,即每4位隔一空格。双字节数最大值为:1 * 215 + 1 *214 + 1* 213 + 1 * 212 + 1 * 211 + 1 * 210 + + 1 * 22 + 1 * 21 + 1* 20 = 65535很自然,我们可以想到,一种数据类型允许的最大值,和它的位数有关。具体的计算方法方法是,如果它有n位,那么最大值就是:n位二进制数的最大值:1 * 2(n
14、-1) + 1 * 2(n-2) + . + 1 * 20任何一种基本数据类型,都有其范围。比如字符类型,它的最大值是255,那么,当一个数在其类型的范围已经是最大值时,如果再往上加1,就会照成“溢出”。其实,有限定的范围的数量,并不只在计算机中出现。钟表就是一个例子。10点再加1点是11点,再加1点是12点,可是再加1点,就又回到1点。再如汽车的行程表,假设最多只能显示99999公里,当达到最高值后继续行驶,行程表就会显示为00000公里。二进制的优点是:二进制只有“0”和“1”两数字,很容易表示。电压的高和低、 晶体管的截止与饱和、磁性材料的磁化方向等都可以表示为“0”和“1”两种状态。二
15、进制数的每一位只有0和1两状态,只需要两种设备就能表示, 所以二进制数节省设备。由于状态简单,所以抗干扰力强,可靠性高。二进制的主要缺点是数位太长,不便阅读和书写,人们也不习惯。为此常用八进制和十六进制作为二进制的缩写方式。为了适应人们的习惯,通常在计算机内都采用二进制数,输入和输出采用十进制数,由计算机自己完成二进制与十进制之间的相互转换。三、十六进制数二进制数在计算机系统中处理很方便,但当位数较多时,比较难记忆及书写,为了减小位数,通常将二进制数用十六进制表示。2进制,用两个阿拉伯数字:0、1;8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;10进制,用十个阿拉伯数字:0到9;1
16、6进制,用十六个阿拉伯数字等等,阿拉伯人或说是印度人,只发明了10个数字啊? 16进制就是逢16进1,但我们只有0-9这十个数字,所以我们用a,b,c,d,e,f这五个字母来分别表示10,11,12,13,14,15。字母不区分大小写。十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方。所以,在第n(n从0开始)位上,如果是是数 x (x 大于等于0,并且x小于等于 15,即:f)表示的大小为 x * 16的n次方。假设有一个十六进数 2af5, 那么如何换算成10进制呢?用竖式计算: 第0位: 5 * 160 = 5第1位: f * 161 = 2
17、40第2位: a * 162 = 2560第3位: 2 * 163 = 8192 -10997 直接计算就是:5 * 160 + f * 161 + a * 162 + 2 * 163 = 10997(别忘了,在上面的计算中,a表示10,而f表示15)现在可以看出,所有进制换算成10进制,关键在于各自的权值不同。假设有人问你,十进数 1234 为什么是 一千二百三十四?你尽可以给他这么一个算式:1234 = 1 * 103 + 2 * 102 + 3 * 101 + 4 * 100十六进制是计算机系统中除二进制数之外使用较多的进制,其计数法的特点为:有0,1,2,3,4,5,6,7,8,9,a
18、,b,c,d,e,f等共十六个数码,其分别对应于十进制数的015;十六进制数的加减法的进借位规则为:借一当十六,逢十六进一。十六进制数的位权一般表示为:16n-1。其中16是十六进制的进位基数,n表示相对小数点的位置。在书写时,用加注16或h的方式表示十六进制数,例如:(8fa.5)16或8fa.5h。例如:写出(8fa.5)16的十进制数表达式。(8fa.5)16=8162+15161+10160+516-1=(2298.3125)10四、八进制数八进制计数法的特点是:有八个不同的计算符号0、1、2、3、4、5、6、7,这八个符号称为数码。采用逢八进一的原则。对应于十进制数0、1、2、3、4
19、、5、6、7、8,八进制数分别记作0、1、2、3、4、5、6、7、8、10。八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方所以,设有一个八进制数:1507,转换为十进制为:用竖式表示:第0位 7 * 80 =7第1位 0 * 81 =0 第2位 5 * 82 =320 第3位 1 * 83 =512 - 839同样,我们也可以用横式直接计算:7 * 80 + 0 * 81 + 5 * 82 + 1 * 83 = 839结果是,八进制数 1507 转换成十进制数为 839下表列出了十进制016对应的二进制数和十六进制数。十进制数二进制数十六进制数00000010
20、0011200102300113401004501015601106701117810008910019101010a111011b121100c131101d141110e151111f161000010五、十进制数转化为非十进制数十进制转换数转换为非十进制数时,可将其分为整数部分和小数部分分别进行转换,最后将结果合并为目的数。 整数部分的转换整数部分的转换是采用除基取余法。所谓除基取余法就是用欲转换的数据的基数去除十进制数的整数部分,第一次除取得的余数为目的数的最低位,把得到的商再除以该基数,所得余数为目的数的次低位,依此类推,继续上面的过程,直到商为0时,所得余数为目的数的最高位。1、十
21、进制转换成二进制例1、:将十进制的168转换为二进制 (10101000)2分析:第一步,将168除以2,商84,余数为0 第二步,将商84除以2,商42余数为0 第三步,将商42除以2,商21余数为0第四步,将商21除以2,商10余数为1第五步,将商10除以2,商5余数为0 第六步,将商5除以2,商2余数为1第七步,将商2除以2,商1余数为0 第八步,将商1除以2,商0余数为1 第九步,读数,因为最后一位是经过多次除以2才得到的,因此它是最高位,读数字从最后的余数向前读,即10101000。例2、6转换成二进制,结果是110。把上面的一段改成用表格来表示,则为:被除数计算过程商余数66/23
22、033/21111/201(在计算机中,用 / 来表示) 如果是在考试时,我们要画这样表还是有点费时间,所更常见的换算过程是使用下图的连除: (图:1)请大家对照图,表,及文字说明,并且自已拿笔计算一遍如何将6转换为二进制数。 说了半天,我们的转换结果对吗?二进制数110是6吗?你已经学会如何将二进制数转换成10进制数了,所以请现在就计算一下110换成10进制是否就是6。练习:例将十进制53d转换为二进制数110101b。小数部分的转换小数部分的转换是采用乘基取整法。所谓乘基取整法就是用该小数乘上目的数制的基数,第一次乘得结果的整数部分为目的数的小数部分的最高位,其小数部分再乘上基数,所得结果
23、的整数部分为目的数的次高位,依此类推,继续上述的过程,直到小数部分为0或达到要求的精度为止。方法:乘2取整法,即将小数部分乘以2,然后取整数部分,剩下的小数部分继续乘以2,然后取整数部分,剩下的小数部分又乘以2,一直取到小数部分 为零为止。如果永远不能为零,就同十进制数的四舍五入一样,按照要求保留多少位小数时,就根据后面一位是0还是1,取舍,如果是零,舍掉,如果是1,向入一位。换句话说就是0舍1入。读数要从前面的整数读到后面的整数,下面举例: 例1:将0.125换算为二进制 (0.001)2分析:第一步,将0.125乘以2,得0.25,则整数部分为0,小数部分为0.25; 第二步, 将小数部分
24、0.25乘以2,得0.5,则整数部分为0,小数部分为0.5; 第三步, 将小数部分0.5乘以2,得1.0,则整数部分为1,小数部分为0.0; 第四步,读数,从第一位读起,读到最后一位,即为0.001。 例2,将0.45转换为二进制(保留到小数点第四位) 大家从上面步骤可以看出,当第五次做乘法时候,得到的结果是0.4,那么小数部分继续乘以2,得0.8,0.8又乘以2的,到1.6这样一直乘下去,最后不可能得到小数部分为零,因此,这个时候只好学习十进制的方法进行四舍五入了,但是二进制只有0和1两个,于是就出现0舍1入。这个也是计算机在转换中会产生误差,但是由于保留位数很多,精度很高,所以可以忽略不计
25、。 那么,我们可以得出结果将0.45转换为二进制约等于(0.0111)2从上面可以看出该数在转换为二进制时,尽管已经过了解5次相乘,但其小数位还存在,由于题目要求保留小数后4位,故结果为:0.736d0.1011b或0.736d0.1100b。上面介绍的方法是十进制转换为为二进制的方法,需要大家注意的是: 1) 十进制转换为二进制,需要分成整数和小数两个部分分别转换。2) 当转换整数时,用的除2取余法,而转换小数时候,用的是乘2取整法 。3) 注意他们的读数方向。因此,我们从上面的方法,我们可以得出十进制数168.125转换为二进制为10101000.001,或者十进制数转换为二进制数约等于1
26、0101000.0111。 二进制转换为十进制不分整数和小数部分:方法:按权相加法,即将二进制每位上的数乘以权,然后相加之和即是十进制数。例 将二进制数101.101转换为十进制数。 得出结果:(101.101)2=(5.625)10 1*22+0*21+1*20+1*2-1+0*2-2+1*2-3=4+1+0.5+0.125=(5.625)10大家在做二进制转换成十进制需要注意的是:1) 要知道二进制每位的权值 。2) 要能求出每位的值。2、十进制转换成八进制10进制数转换成8进制的方法,和转换为2进制的方法类似,惟一变化:除数由2变成8。来看一个例子,如何将十进制数120转换成八进制数。用
27、表格表示:被除数计算过程商余数120120/81501515/81711/801120转换为8进制,结果为:170。2、十进制转换成十六进制10进制数转换成16进制的方法,和转换为2进制的方法类似,惟一变化:除数由2变成16。同样是120,转换成16进制则为:被除数计算过程商余数120120/167877/1607120转换为16进制,结果为:78。作业:请拿笔纸,采用(图:1)的形式,演算上面两个表的过程。六、非十制数转换成十进制数由于任一数都可以按权展开,于是很容易将一个非十进制数转换为相应的十进制数。具体的步骤是:将一个非十进制按权展开成一个多项式,每项是该位的数码与相应的权之积,把多项
28、式按十进制数的规则进行计算机求和,所得结果即是该数的十进制。七、二进制与十六进制数、八进制数的相互转换四位二进制数共有十六种组合,而十六种组合正好与十六进制的十六种组合一致,故每四位二进制数对应于一位十六进制数,因此二进制数与十六进制之间的转换非常简单。三位二进制数共有八种组合,而八种组合正好与八进制的八种组合一致,故每三位二进制数对应于一位八进制数,因此二进制数与八进制之间的转换也非常简单。下面通过四个例子来说其转换:从上面例子可以总结出两种进制转换的方法:二进制转换为十六进制时:只要将二进制数的整数部分自右向左每四位一组,最后不足四位的用零补足;小数部分则自左向右每四位一组,最后不足四位时
29、在右边补零。再把每四位二进制数对应的十六进制数写出来即可。例1、:将二进制11101001.1011转换为十六进制 得到结果:将二进制11101001.1011转换为十六进制为e9.b 例2、:将101011.101转换为十六进制得到结果:将二进制101011.101转换为十六进制为2b.a十六进制数转换为二进制数的正好与此相反,只要将每位的十六进制数对应的四位二进制写出来即行了。例1、将十六进制6e.2转换为二进制数得到结果:将十六进制6e.2转换为二进制为01101110.0010即110110.001二进制转换为八进制时:只要将二进制数的整数部分自右向左每三位一组,最后不足三位的用零补足
30、;小数部分则自左向右每三位一组,最后不足三位时在右边补零。再把每三位二进制数对应的八进制数写出来即可。例1、将二进制数101110.101转换为八进制 得到结果:将101110.101转换为八进制为56.5 例2、 将二进制数1101.1转换为八进制 得到结果:将1101.1转换为八进制为15.4八进制数转换为二进制数的也正好与此相反,只要将每位的八进制数对应的三位二进制写出来即行了。例1、将八进制数67.54转换为二进制得到结果:将八进制数67.54转换为二进制110111.101100,即110111.1011注意:一般情况先将十进制转化为二进制,有二进制转化为其他进制,如十六进制和八进制
31、。八、常用编码bcd编码在数字系统中,各种数据要转换为二进制代码才能进行处理,而人们习惯于使用十进制数,所以在数字系统的输入输出中仍采用十进制数,这样就产生了用四位二进制数表示一位十进制数的方法,这种用于表示十进制数的二进制代码称为二十进制代码(binary coded decimal),简称为bcd码。它具有二进制数的形式以满足数字系统的要求,又具有十进制的特点(只有十种有效状态)。在某些情况下,计算机也可以对这种形式的数直接进行运算。常见的bcd码表示有以下几种。8421bcd编码 这是一种使用最广的bcd码,是一种有权码,其各位的权分别是(从最有效高位开始到最低有效位)8,4,2,1。例
32、写出十进数563.97d对应的8421bcd码。563.97d=0101 0110 0011 . 1001 01118421bcd例写出8421bcd码1101001.010118421bcd对应的十进制数。1101001.010118421bcd0110 1001 . 0101 10008421bcd=69.58d在使用8421bcd码时一定要注意其有效的编码仅十个,即:00001001。四位二进制数的其余六个编码1010,1011,1100,1101,1110,1111不是有效编码。2421bcd编码 2421bcd码也是一种有权码,其从高位到低位的权分别为2,4,2,1,其也可以用四位二
33、进制数来表示一位十进制数。其编码规则如下表。余3码 余3码也是一种bcd码,但它是无权码,但由于每一个码对应的8421bcd码之间相差3,故称为余3码,其一般使用较少,故正须作一般性了解,具体的编码如下表。常见bcd编码表十进制数8421bcd码2421bcd码余3码0000000000011100010001010020010001001013001100110110401000100011150101101110006011011001001701111101101081000111010119100111111100100001,00000001,00000100,0011格雷反射码(循
34、环码)格雷码是一种无权码,其特点是任意两个相邻的码之间只有一个数不同。另外由于最大数与最小数之间也仅一个数不同,故通常又叫格雷反射码或循环码。十进制数二进制数格雷码十进制数二进制数格雷码000000000810001100100010001910011101200100011101010111130011001011101111104010001101211001010501010111131101101160110010114111010017011101001511111000九、原码、反码、补码结束了各种进制的转换,我们来谈谈另一个话题:原码、反码、补码。我们已经知道计算机中,所有数据最
35、终都是使用二进制数表达。我们也已经学会如何将一个10进制数如何转换为二进制数。不过,我们仍然没有学习一个负数如何用二进制表达。比如,假设有一int类型的数,值为5,那么,我们知道它在计算机中用四个字节(32位)表示为:( 00000000 00000000 00000000 00000101)。5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。那么-5在计算机中如何表示?在计算机中,负数以其正值的补码形式表达。什么叫补码呢?这得从原码,反码说起。原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。比如 00000000 00000000 00000000
36、00000101 是 5的 原码。反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。取反操作指:原为1,得0;原为0,得1。(1变0; 0变1)比如:将00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。称:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。反码是相互的,所以也可称:11111111 11111111 11111111 11111010 和 00000000
37、 00000000 00000000 00000101 互为反码。补码:反码加1称为补码。也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。比如:00000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010。那么,补码为:11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011所以,-5 在计算机中表达为:11111111 11111111 11111111 11111011。转换
38、为十六进制:0xfffffffb。再举一例,我们来看整数-1在计算机中如何表示。假设这也是一个int类型,那么:1、先取1的原码: 00000000 00000000 00000000 000000012、得反码:11111111 11111111 11111111 111111103、得补码:11111111 11111111 11111111 11111111可见,1在计算机里用二进制表达就是全1。16进制为:0xffffff。一切都是纸上说的说1在计算机里表达为0xffffff,我能不能亲眼看一看呢?当然可以。利用简单c程序,我们可以看到每个变量的16进制值。十、理解有符号数和无符号数生
39、活中我们所讲的数都是正数,例如,同样是年纪和工资,前者不需要有负值,但后者可能需要至少所有的老板都这样认为。那么,负数在计算机中如何表示呢?通过前面的学习,我们知道计算机用“补码”表示负数。1、你自已决定是否需要有正负。就像我们必须决定某个量使用整数还是实数,使用多大的范围数一样,我们必须自已决定某个量是否需要正负。如果这个量不会有负值,那么我们可以定它为带正负的类型。在计算机中,可以区分正负的类型,称为有符类型,无正负的类型(只有正值),称为无符类型。数值类型分为整型或实型,其中整型又分为无符类型或有符类型,而实型则只有符类型。字符类型也分为有符和无符类型。比如有两个量,年龄和库存,我们可以
40、定前者为无符的字符类型,后者定为有符的整数类型。2、使用二制数中的最高位表示正负。首先得知道最高位是哪一位?1个字节的类型,如字符类型,最高位是第7位,2个字节的数,最高位是第15位,4个字节的数,最高位是第31位。不同长度的数值类型,其最高位也就不同,但总是最左边的那位(如下示意)。字符类型固定是1个字节,所以最高位总是第7位。(粗体为最高位)单字节数: 1111 1111(70)双字节数: 1111 1111 1111 1111(150)四字节数: 1111 1111 1111 1111 1111 1111 1111 1111(310)当我们指定一个数是无符号类型时,那么其最高位的1或0,
41、和其它位一样,用来表示该数的大小。当我们指定一个数是有符号类型时,此时,最高数称为“符号位”,为1时,表示该数为负值,为0时表示为正值。3、无符号数和有符号数的范围区别。无符号数中,所有的位都用于直接表示该值的大小;有符号数中最高位用于表示正负,所以,当为正值时,该数的最大值就会变小。我们举一个字节的数值对比:无符号数: 1111 1111值:255=1* 27 + 1* 26 + 1* 25 + 1* 24 + 1* 23 + 1* 22 + 1* 21 + 1* 20有符号数: 0111 1111值:127=1* 26 + 1* 25 + 1* 24 + 1* 23 + 1* 22 + 1
42、* 21 + 1* 20同样是一个字节,无符号数的最大值是255,而有符号数的最大值是127。原因是有符号数中的最高位被挪去表示符号了。并且,我们知道,最高位的权值也是最高的(对于1字节数来说是2的7次方=128),所以仅仅少于一位,最大值一下子减半。不过,有符号数的长处是它可以表示负数。因此,虽然它的在最大值缩水了,却在负值的方向出现了伸展。我们仍一个字节的数值对比:无符号数: 0 255有符号数: -128 0 127同样是一个字节,无符号的最小值是 0 ,而有符号数的最小值是-128。所以二者能表达的不同的数值的个数都一样是256个。只不过前者表达的是0到255这256个数,后者表达的是
43、-128到+127这256个数。一个有符号的数据类型的最小值是如何计算出来的呢?有符号的数据类型的最大值的计算方法完全和无符号一样,只不过它少了一个最高位(见第3点)。但在负值范围内,数值的计算方法不能直接使用1* 26 + 1* 25 的公式进行转换。在计算机中,负数除为最高位为1以外,还采用补码形式进行表达。所以在计算其值前,需要对补码进行还原。这里,回忆一下补码的形式:以我们原有的数学经验,在10进制中:1 表示正1,而加上负号:-1 表示和1相对的负值。那么,我们会容易错误地认为在2进制中(1个字节): 0000 0001 表示正1,则高位为1后:1000 0001应该表示-1。然而,
44、事实上计算机中的规定有些相反,请看下表:二进制值(1字节)十进制值10000001-12710000011-125.1111 1110-21111 1111-1首先我们看到,从-1到-128,其二进制的最高位都是1(表中标为红色),正如我们前面的学。然后我们有些奇怪地发现,1000 0000 并没有拿来表示 -0;而1000 0001也不是拿来直观地表示-1。事实上,-1 用1111 1111来表示。怎么理解这个问题呢?先得问一句是-1大还是-128大?当然是 -1 大。-1是最大的负整数。以此对应,计算机中无论是字符类型,或者是整数类型
45、,也无论这个整数是几个字节。它都用全1来表示 -1。比如一个字节的数值中:1111 1111表示-1,那么,1111 1111 - 1 是什么呢?和现实中的计算结果完全一致。1111 1111 - 1 = 1111 1110,而1111 1110就是-2。这样一直减下去,当减到只剩最高位用于表示符号的1以外,其它低位全为0时,就是最小的负值了,在一字节中,最小的负值是1000 0000,也就是-128。我们以-1为例,来看看不同字节数的整数中,如何表达-1这个数:字节数二进制值十进制值单字节数1111 1111-1双字节数1111 1111 1111 1111-1四字节数1111 1111 1
46、111 1111 1111 1111 1111 1111-1可能有同学这时会混了:为什么 1111 1111 有时表示255,有时又表示-1?所以我再强调一下本节前面所说的第2点:你自已决定一个数是有符号还是无符号的。写程序时,指定一个量是有符号的,那么当这个量的二进制各位上都是1时,它表示的数就是-1;相反,如果事选声明这个量是无符号的,此时它表示的就是该量允许的最大值,对于一个字节的数来说,最大值就是255。什么是ascii码?ascii码英文全称america standard code for information interchange,中文意思:美国信息交换标准码。它已被国际标准
47、化组织(iso)定为国际标准,称为iso 646标准。适用于所有拉丁文字字母,ascii码有7位码和8位码两种形式。ascii码于1968年提出,用于在不同计算机硬件和软件系统中实现数据传输标准化,在大多数的小型机和全部的个人计算机都使用此码。ascii码划分为两个集合:128个字符的标准ascii码和附加的128个字符的扩充和ascii码。因为1位二进制数可以表示(21=)2种状态:0、1;而2位二进制数可以表示(22)=4种状态:00、01、10、11;依次类推,7位二进制数可以表示(27=)128种状态,每种状态都唯一地编为一个7位的二进制码,对应一个字符(或控制码),这些码可以排列成一
48、个十进制序号0127。所以,7位ascii码是用七位二进制数进行编码的,可以表示128个字符。 第032号及第127号(共34个)是控制字符或通讯专用字符,如控制符:lf(换行)、cr(回车)、ff(换页)、del(删除)、bel(振铃)等; 通讯专用字符:soh(文头)、eot(文尾)、ack(确认)等; 第33126号(共94个)是字符,其中第4857号为09十个阿拉伯数字;6590号为26个大写英文字母,97122号为26个小写英文字母,其余为一些标点符号、运算符号等。 注意:在计算机的存储单元中,一个ascii码值占一个字节(8个二进制位),其最高位(b7)用作奇偶校验位。所谓奇偶校验
49、,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。(ascii:american standard code for information interchange,美国信息交换标准码。)值符号值符号值符号0空字符44,9132空格45-9233!46.933447/9435#48 570 995-36$58:9637%59;97 122a z38&6012541)63?12642*64127del (
50、delete键)43+65 90a z(其中,031都是一些不可见的字符,所以这里只列出值为0的字符,值为0的字符称为空字符,输出该字符时,计算机不会有任何反应。我们以后会学习0字符的特殊作用。)十二、数据在内存中的存取(变量与内存地址)前面讲到“白马、黑马”时,我们说一匹白马和一匹黑马具有共同的数据类型“马”,但二者是相对独立的个体。现在我们以共熟悉的“人”来继续这个话题,最终引出变量与内存地址的关系。张三和李四的数据类型都是“人类”。但张三和李四显然是独立的量:张三吃了两块蛋糕,李四不可能因此就觉和肚子饱了;而李四在下班的路上捡到一个钱包,虽然正好是张三的,两人似乎通过钱包有了点关系,但谁
51、得谁失仍然不容混淆。这一切都很好理解。张三和李四之所以是不同的个体,根本原因在于两人有着不同的肉身。如果是一对连体婴儿,虽然也是两个人,但当左边的婴儿被蚊子咬一口时,右边婴儿是否也会觉得痒,就不好说了。现在我们困难的是,如何理解两个不同的变量,也是互相独立的呢?答案就在“内存地址”,“内存地址”就是变量的肉身。不同的变量,拥有不同的内存地址。譬如:char a;char b;上面有两个字符类型的变量a和b,a拥有自已的内存地址,b也拥有自已的内存地址,二者绝不相同。而a、b只不过分别是那两个内存地址的“名字”,恰如“张三、李四”。让我们看图解:看,内存就像是开宾馆的。不过这有宾馆有点怪。首先它
52、每一个“房间”的大小都是一个字节(因此,计算机能单独处理的最小内存单位为字节)。它的门牌号也不叫房号,而是叫内存地址。在左图中,“房客”,变量a住在内存地址为1000002的内存中,而变量b则住在它的隔壁,地址为100003的内存中。另外,如果你足够细心,你还会发现:内存地址由下往上,从小到大排列。变量的内存地址是在程序运行时,才由操作系统决定。这就好像我们住宾馆。我们预定一个房间,但房间号由宾馆根据情况决定,我们可以改变变量的值,但变量的地址我们无法改变。对照宾馆一说,就是我们订了房间,可以不去住,还可以决定让谁去住在那个房间里。(当然,现实生活中宾馆可能不会允许你这么做)。在前面图示的例子
53、中,a、b是字符(char)类型。各占用1个字节。如果是 int类型,那么应该占4个字节。这4个字节必须是连续的。让我们再来看一个例子: int a;int b;char c;在后面c语言,我们声明了两个int类型和一个char类型的变量。同时和上面一样,我们事实上是假设了这三个变量被依次序分配在相邻的内存地址上(真实情况下,这和其它因素,如指定的字节对齐方式等有关)。从右图中可以看到整型变量a占用了1000001100004这4个字节。在我们已学习的数据类型中,long double占用10个字节,是占用内存空间最大的一种数据类型。以后我们学习数组,或者用户自定数据类型,则可能要求占用相当大的,并且同样必须是连续的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年湄潭县水务局选调所属事业单位工作人员考试真题
- 诚信应考的国旗下演讲稿500字范文5篇
- 读书班会主持稿5篇
- 节能环保设备技改项目可行性研究报告
- 砂石料生产线承包合作协议书
- 安全伴我同行演讲稿5篇
- 智能家居维修工聘用合同
- 设计概论试题
- 市场的调研报告8篇
- 语文培训机构讲师聘用合同
- 油气地质储量计算及评价
- 【2023高血压患者服药依从性研究(论文)2800字】
- 村卫生室2023年度绩效考核评分细则(基本公共卫生服务)
- 宽带接入合同
- 阴阳五行学说 PowerPoint 演示文稿 全面版【PPT课件】
- 测定总糖原始记录
- 混凝土强度自动评定表格
- 大学生心理稿范文800字(优选9篇)-1
- 北京科技大学EMC-VNX5300实施文档
- 氨分解制氢安全技术要求3
- 2023年重庆市大渡口区春晖路街道阳光社区工作人员考试模拟试题及答案
评论
0/150
提交评论