C程序设计(第四版)第2章 计算机中的数_第1页
C程序设计(第四版)第2章 计算机中的数_第2页
C程序设计(第四版)第2章 计算机中的数_第3页
C程序设计(第四版)第2章 计算机中的数_第4页
C程序设计(第四版)第2章 计算机中的数_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机中的数从十进制谈起常用的十进制(Decimal)数,有两个特点:基数为10

逢10进一以上的概念可以推广到任意N进制十进制的权,与数字所在的位置有关。例如个位数的权是1,十位数的权是10,……,所以(123)10=1*102+2*101+3*100推广下,N进制从右起,权值分别是N0,N1,…计算机中的数计算机中所有的数都是以二进制(Binary)存储的,每一个0或者1叫做1位(Bit)。二进制的优点是运算简单,易实现且可靠,为逻辑设计提供了有利的途径、节省设备。二进制也是有缺点的,就是写起来太长。为了便于描述,也常用八进制(Octal)、十六进制(Hexadecimal),这两种进制是二进制的缩写。二进制运算二进制的运算法则与十进制的运算法则是相似的。例如求和运算:0+0=0,0+1=1,1+0=1,1+1=10不过,计算机需要记住的运算法则就只有上面的四条,二进制是不是soeasy?那其它运算呢?实际上,计算机根本不会直接进行减法、乘法和除法运算,这些运算最后都是借助加法运算完成的,很神奇吧?存储单位单个Bit能存储的信息太少,所以计算机处理数的时候,总是以字节为基本单位。要表示一个数,最少要20字节,不够的话就21、22、23…字节。1字节(Byte)=8位,更多字节则用2的幂次表示,如1KB=210B,1MB=220B,1GB=230B,1TB=240B…计算机存储整数和存储浮点数的方法是不同的,由于存储浮点数方法比较复杂,这里不做具体讨论。我们只研究整数。整数的表示法之一:原码原码的求法如下:忽略符号,除2取余,逆序排列,最后补符号位。符号位总是最高位,0为正,1为负,其余位叫做数值位。假定用1字节表示整数,求-44的原码求法如下: 44/2=22……余0,

22/2=11……余0,

11/2=5……余1,

5/2=2……余1,

2/2=1……余0,

1/2=0……余1于是-44=(10101100)2,顺便得到44=(00101100)2第二个0是补足8位用的。整数的表示法之二:补码补码求法如下:正数的补码=原码,负数的补码=其绝对值的原码逐位取反+1例如44的原码=(00101100)2

=补码例如求-44的补码,则要:

1.求其绝对值的原码:(00101100)2

2.逐位取反:(11010011)2

3.+1:+1

所以-44的补码是:(11010100)2已知一个数的补码,如何计算这个数?如果补码=(00101100)2那么显然是一个正数,所以这样求即可:

1*25+1*23+1*22=44如果补码=(11010100)2那么就要:

1.取反:(00101011)2

2.+1:1

得到:(00101100)2

=44,所以是-44结论:补码和原数(负)的来回转换,都是取反+1补码的一个有趣的特点符号扩展把补码的符号位向左边填充,叫做符号扩展,例如:结论是:符号扩展不会改变原数的大小。(注意以上的二进制数应该是写成一串的,为方便查看才特意换行的,第一列数都表示整数1,第二列数都表示整数-1)原数(1字节)0000000111111111扩展为2字节000000000000000111111111

11111111扩展为4字节00000000000000000000000000000001111111111111111111111111

11111111总结一下原码和补码两种码的共同点是:最高位都是符号位,0表示正数,1表示负数。同一个正数,用两种码来表示是完全相同的。计算机使用补码存储整数,原码在浮点数的存储中才会被用到。计算机存储一个整数,可能使用20,21,22,23……字节。当一个整数需要扩充字节时,补码使用符号扩展来填充高位。原码的表达能力从数学角度说,1字节能表示28=256个数。接下来的讨论仅针对1字节的情况,不再特意指明。其它情况类推。原码只能表示255个数,因为00000000和10000000都表示零(一个是+0,一个是-0),所以原码表示范围是-127~127。补码的表达能力补码能够表示256个数,因为只有00000000表示零,10000000则表示-128。零的表示法唯一是补码的一个优点。补码的表示范围是-128~127。有符号数和无符号数原码和补码的最高位表示符号,正0负1。有些情况下不需要处理负数,例如人的年龄,此时负半轴的数很浪费。此时可以约定最高位的符号位不再表示符号,而作为数值位,这样原码补码的表示范围都变成0~255,这种数叫无符号数。八进制和十六进制给定一个二进制补码:1011110101101110,你能够很快记住么?估计很难。八进制和十六进制是为了方便人们读写和记忆而引入的。把一个二进制串写成八进制和十六进制时,最高位都被看成数值位(也就是无符号数)。八进制使用0-7这八个符号,十六进制使用0-9和A-F十六个符号。A表示10,B表示11……F表示15,其中A-F也可以使用小写字母a..f。上述那个二进制串,相当于(136556)8或者(BD6E)16,可见使用十六进制确实方便得多。八进制和二进制的相互转换八进制二进制:每一个八进制位,替换成三个的二进制位。反之亦然。如:(137)8=(1011111)2八进制二进制00001001201030114100510161107111十六进制和二进制的相互转换十六进制二进制:每一个十六进制位,替换成四个的二进制位。反之亦然。如:(137)16=(100110111)2十六进制二进制0000010001200103001140100501016011070111十六进制二进制8100091001A(a)1010B(b)1011C(c)1100D(d)1101E(e)1110F(f)1111八进制和十六进制的转换一般来说这种需求不多,如果真要计算,可以采用二进制作为中转,然后将二进制串重新分组后再转换。即:八进制二进制十六进制例如:(37)8=(011111)2重新分组

(011111)2=(1F)16十六进制到十进制的转换十进制十六进制:除16取余,然后所有余数逆序排列。例如求44的十六进制,求法如下: 44/16=2……余12(就是C),

2/16=0……余2

于是44=(2C)16上述做法可以推广到十进制N进制。例如前面求原码,用的就是除2取余。十进制到十六进制的转换十六进制十进制:按权重求和。例如求(ABC)16的十进制,求法如下:

10*162+11*161+12*160=2748上述做法可以推广到N进制十进制。ASCII码计算机存储任何信息都是用二进制数,所以字符也用二进制存储。ASCII(AmericanStandardCodeforInformationInterchange,美国信息互换标准代码)码规定了任何一个字符和整数的对应关系,所以只要存储了对应的整数,就相当于存储了字符。每一个ASCII字符使用1个字节存储。ASCII码中:0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符);32~126(共95个)是字符(32是空格),其中48~57为0到9十个阿拉伯数字;65~90为26个大写字母,97~122号为26个小写字母,其余为一些标点符号、运算符号等。记住一个结论:ASCII中,所有大写字母是连续编码,所有小写字母是连续编码,所有数字字符是连续编码。几个字符的ASCII值(16进制格式):空格:20'0':30,

可类推:'1':31,'2':32,…'A':41,可类推:'B':42,'C':43,…'a':61,可类推:'b':62,'c':63,…扩展ASCII字符是从128到255(0x80-0xff)的字符,但不是每台计算机都支持,所以能不用尽量不用。本章习题-1/2

求下列各数的补码的8进制和16进制表示(每个数用2字节存储):(1)10(2)3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论