- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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)