第1章 准备知识和开发环境.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第1章 准备知识和开发环境 1.1 程序设计前的准备知识 一、内存存储器的组织与结构 1. 内存的基本结构示意图 程序(包括指令和数据)必须驻留内存储器才能运行。内存是由一个个内存单元组成的,目前主流计算机的内存单元中存储一字节的信息。 2. 内存地址 为了区分所有的内存单元,我们还必须从0开始为每个内存单元顺序“编号”。 内存单元的编号称为内存单元的地址(简称内存地址或地址码),对所有的内存单元进行编号也称内存编址。图1.1中的内存地址是用十进制数表示的,而在机内,内存地址是用二进制数表示的(为了方便起见,我们在讨论内存编址问题时常用十六进制数表示内存单元的地址)。 3. 内存编址 【例1.1】如果内存容量为64MB,则共有多少个内存单元? 【课后思考题1.1】假设地址码的长度为32位(用32位二进制数表示每个内存单元的地址),则内存容量是多少? 【课后思考题1.2】对于64MB容量的内存储器,其地址码长度是多少?用十六进制数表示内存地址的范围? 二、基本类型数据在内存中的存储格式 1. 西文字符在内存中的存储格式 (1) 西文字符 常见的西文字符(包括可显和不可显字符在内)共计128个。由于128=27,故每个西文字 符可用7位二进制数表示。对西文字符进行编码,实际上就是在所有的7位二进制数(可视为一个集合)和西文字符集之间建立一一映射关系。C语言采用ASCII编码(美国标准信息交换码)来表示西文字符集。 在C程序中,字符在内存中是以它的ASCII码来存储的。我们知道每个内存单元可以存储1字节的数据,但西文字符的ASCII码才7位,所以实际在存储7位ASCII码时会在所有位前多存储一位0。 例如,字符A的十进制ASCII码值为65,内存中存储的是A的二进制ASCII码值。 (2) 常见字符的十六进制ASCII码值 A~Z的ASCII码值为41H~5AH; a~z的ASCII码值为61H~7AH; 0~9的ASCII码值为30H~39H; (3) 扩展ASCII码 基本ASCII码共7位,可表示128个西文字符。后来又提出的扩展ASCII码,用8位二进制编码,最高位可以为0或1,共可表示256个西文字符。 2. 整数在内存中的存储格式 带符号的十进制整数在机内通常有三种表示法:原码、反码和补码。 (1) 整数的原码表示 【例1.4】 求±57的原码(保留最高位作为符号位)。 先将57无符号地转换成二进制数:57=111001 [+57]原=0 111001,[-57]原=1 111001 说明:由于内存是以字节为单位存放数据的,往往需要对原码表示结果进行符号位扩展,即将原码结果凑成字节的整数倍才能存放在内存中(见例1.5)。 【例1.5】 用16位(2字节)原码表示±57。 [+57]原0 0111001,[-57]原1 1111001 对原码补充说明两点: +0和-0的原码表示不同,假设用2字节表示±0的原码(采用1位符号位),则 [+0]原=0 0000000[-0]原=1 0000000 N位原码(采用1位符号位)表示十进制整数范围为-(2N-1-1)~2N-1-1,例如8位原码表示十进制整数范围为-(28-1-1)~28-1-1,即-127~127。 (2) 整数的反码表示 【例1.6】 求±57的反码(保留最高位作为符号位)。 由例1.4可知:[+57]原=0111001,[-57]原=1111001 正整数的反码就是其原码,负整数的反码只对其原码的数值部分逐位取反: [+57]反=0111001,[-57]反=1000110 【例1.7】 用16位(2字节)反码表示±57。 [+57]反=000000000 0111001,[-57]反=111111111 1000110 对反码补充说明两点: +0和-0的反码表示不同,假设用2字节表示±0的反码(采用1位符号位),则 [+0]反=0 0000000[-0]反=1 1111111 N位反码(采用1位符号位)表示十进制整数范围为-(2N-1-1)~2N-1-1,例如用8位反码表示整数,则能表示的十进制整数范围为-(28-1-1)~28-1-1,即-127~127。 (3) 整数的补码表示 【例1.8】 求±57的补码(保留最高位作为符号位)。 由例1.6可知:[+57]反=0111001,[-57]反=1000110 正整数的补码就是其反码,所以正整数的原码、反码和补码是相同的。负整数的补码只在其反码的数值部分的末位加1:[+57]补=0111001,[-57]补=1000111 【例1.9】 用16位(2字

文档评论(0)

82393aa + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档