C03第2章 数字化信息编码与C语言数据类型(1)_第1页
C03第2章 数字化信息编码与C语言数据类型(1)_第2页
C03第2章 数字化信息编码与C语言数据类型(1)_第3页
C03第2章 数字化信息编码与C语言数据类型(1)_第4页
C03第2章 数字化信息编码与C语言数据类型(1)_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、新编C语言程序设计教程 清华大学出版社周二强 软件学院 计算机科学与工程系配套视频:配套视频: 博客:博客: C语言的数据类型2.12.1数字化信息编码数字化信息编码 2.1.1 编码时需考虑的问题 2.1.2 定点数 2.1.3 浮点数 2.1.4 原码、反码与补码2.22.2计算机中整数的运算计算机中整数的运算数字化信息编码 数字化信息编码,就是用数字化信息编码,就是用0 0、1 1两个二进制符号,根据一定规则组合起两个二进制符号,根据一定规则组合起来,以表示大量复杂多样的信息如数值、文字、图形等信息。来,以表示大量复杂多样的信息如数值、文字、图形等信息。通常情况下,数据在输入时会被计算机

2、的输入系统自动转化为相应的通常情况下,数据在输入时会被计算机的输入系统自动转化为相应的二进制编码形式二进制编码形式。return2.1.1编码时需考虑的问题数值型数据指的是可以参加算术运算的数据,如此数值型数据指的是可以参加算术运算的数据,如此3232、 -2.3-2.3等。等。虽然十进制数可以方便地转换成二进制数,但在编码时需要考虑以下虽然十进制数可以方便地转换成二进制数,但在编码时需要考虑以下问题。问题。1.1.编码的长度编码的长度2.2.正负号的编码正负号的编码3.3.小数点的编码小数点的编码编码的长度在计算机中,为了处理方便,同类型数的编码长度常常是统一在计算机中,为了处理方便,同类型

3、数的编码长度常常是统一的,也就是说,计算机中的的,也就是说,计算机中的0 0和和3232,位数相同,位数相同, ,占据着相同的存占据着相同的存储空间。储空间。 编码长度常以字节为单位编码长度常以字节为单位, ,当用一个字节(当用一个字节(8 8位)编码整数时,位)编码整数时,0 0和和3232的二进制编码形式可能为的二进制编码形式可能为0000 0000 00000000与与0010 00000010 0000,显然,显然在计算机中它们都是在计算机中它们都是“八位数八位数”。 编码长度的统一使得计算机在处理数据时不必考虑数据的真正编码长度的统一使得计算机在处理数据时不必考虑数据的真正位数位数但

4、是确定的编码长度,使得计算机不能表示任意大的数了。但是确定的编码长度,使得计算机不能表示任意大的数了。 正负号的编码数有正负之分,编码时必然要考虑数的符号。数有正负之分,编码时必然要考虑数的符号。数的符号通常用编码的最高位(左边第一位)表示,并约定数的符号通常用编码的最高位(左边第一位)表示,并约定“0”0”表示正,表示正,“1”1”表示负。表示负。当考虑数的正负即编码有符号位时,当考虑数的正负即编码有符号位时,1111 1111 11111111就成了就成了-127-127了。了。 小数点的编码小数点的位置非常灵活,编码小数点比较困难,实际编码时有定点数小数点的位置非常灵活,编码小数点比较困

5、难,实际编码时有定点数和浮点数两种处理方法。和浮点数两种处理方法。定点数定点数浮点数浮点数return2.1.2 定点数约定小数点的位置固定不变,既然任何数的小数点都默认在同一个位约定小数点的位置固定不变,既然任何数的小数点都默认在同一个位置,那么就不必再考虑小数点的编码了。置,那么就不必再考虑小数点的编码了。根据约定小数点的位置不同,定点数分为定点整数和定点小数两种。根据约定小数点的位置不同,定点数分为定点整数和定点小数两种。定点整数如果约定编码后数的小数点都在最低位后面,则采用这种方式编码的如果约定编码后数的小数点都在最低位后面,则采用这种方式编码的数称为定点整数。数称为定点整数。只有整数

6、的小数点都在最低位的后面,显然定点整数只能编码整数。只有整数的小数点都在最低位的后面,显然定点整数只能编码整数。假定计算机中定点整数的编码长度是假定计算机中定点整数的编码长度是2 2个字节(个字节(1616位),则位),则-123-123的定的定点整数编码形式如下:点整数编码形式如下: 定点小数如果约定编码后数的小数点都在符号位和最高位之间,则采用这种方如果约定编码后数的小数点都在符号位和最高位之间,则采用这种方式编码的数称为定点小数。式编码的数称为定点小数。当约定定点小数的整数部分为当约定定点小数的整数部分为0 0时时, ,定点小数就只能用于编码纯小数定点小数就只能用于编码纯小数(整数部分为

7、(整数部分为0 0的小数即绝对值小于的小数即绝对值小于1 1的数)。的数)。假定定点小数的编码长度是假定定点小数的编码长度是2 2个字节,则个字节,则0.5230.523的定点小数编码形式如的定点小数编码形式如下:下: 0.523=0.523=(0.100001011110001101010011111110.10000101111000110101001111111)2 2小数的误差!0.523=0.523=(0.100001011110001101010011111110.10000101111000110101001111111)2 2,而,而(0.1000010111100010.10

8、0001011110001)2 2约等于约等于0.52297973630.5229797363,显然两者之间有误差。,显然两者之间有误差。在十进制小数编码成二进制小数时多数情况下都会出现误差,忽略这在十进制小数编码成二进制小数时多数情况下都会出现误差,忽略这种误差有时会造成程序运行结果错误。种误差有时会造成程序运行结果错误。2 2个字节的二进制定点小数可以精确到二进制的小数点后第个字节的二进制定点小数可以精确到二进制的小数点后第1515位(位(2 2-15-15约为约为0.000030.00003),约为十进制的小数点后第),约为十进制的小数点后第5 5位。位。练习:为简单起见,假设编码长度只

9、有为简单起见,假设编码长度只有4 4位,则位,则10111011的原值是多少?的原值是多少?定点整数:定点整数:10111011-(1-(12 21 1+1+12 21 1)=-3)=-3定点小数:定点小数:10111011-(1-(12 2-2-21 12 2-3-3)=-0.375)=-0.375returnR进制数的科学计数法数都可以用类似数都可以用类似M MR Rc c的指数形式表示,这种表示方法也称为科学计数法。的指数形式表示,这种表示方法也称为科学计数法。例如:十进制数例如:十进制数25.6=0.25625.6=0.25610102 2,-0.00523 = -0.523,-0.0

10、0523 = -0.5231010-2-2。类似地,。类似地,二进制数二进制数-1011.011-1011.011可以表示为可以表示为 -0.1011011-0.10110111010100100,0.001101010.00110101可以可以表示为表示为0.1101010.1101011010-10-10。一个一个R R进制数,只要确定了进制数,只要确定了M(M(M M1)1)与与C C的值,则该数就唯一确定了。对的值,则该数就唯一确定了。对于二进制数,当要求小数点后第一位必须为于二进制数,当要求小数点后第一位必须为1 1,即,即M M为为0.10.1形式时,形式时,M M的绝对值应不小于

11、十进制数的绝对值应不小于十进制数0.50.5。当要求。当要求0.50.5M M11时,一个二进制数就时,一个二进制数就对应于确定的对应于确定的M M和和C C,其中,其中M M是纯小数,是纯小数,C C是整数,它们都可以用定点数方式是整数,它们都可以用定点数方式编码。编码。 2.1.3 浮点数对任意一个十进制数可以这样编码,首先把该数转换成相应的二进制对任意一个十进制数可以这样编码,首先把该数转换成相应的二进制数,再用科学计数法表示此二进制数,得到数,再用科学计数法表示此二进制数,得到M M和和C C,最后把,最后把M M和和C C用定点用定点数的方式编码。数的方式编码。用这种方式编码的数称为

12、浮点数,它最大的特点就是整个编码分成用这种方式编码的数称为浮点数,它最大的特点就是整个编码分成M M和和C C两部分,其中两部分,其中M M称为尾数,尾数称为尾数,尾数M M所占编码部分的长度将影响可编所占编码部分的长度将影响可编码数的精度,其符号将由所编码数的符号决定;码数的精度,其符号将由所编码数的符号决定;C C称为阶码,阶码称为阶码,阶码C C所所占编码部分的长度将影响可编码数的范围。占编码部分的长度将影响可编码数的范围。 浮点数假定浮点数用假定浮点数用4 4个字节编码,阶码占用一个字节,尾数占用个字节编码,阶码占用一个字节,尾数占用3 3个字节。个字节。数数-12.25=-12.25

13、=(-1100.01-1100.01)2 2可以表示为可以表示为 -0.110001-0.1100011010100100,则,则- -12.2512.25浮点数的编码形式如下:浮点数的编码形式如下:浮点数数数-123=-123=(-111 1011-111 1011)2 2可以表示为可以表示为-0.1111011-0.11110111010111111,则,则-123-123浮点浮点数的编码形式如下:数的编码形式如下:数数0.00523=0.00523=(0.0000000101010110110000001101010.000000010101011011000000110101)2 2可

14、以表示可以表示为为0.101010110110000001101010.101010110110000001101011010-111-111 , ,则则0.005230.00523浮点数的编码形浮点数的编码形式如下:式如下: 以以-123-123为例,它的定点数和浮点数编码形式差别很大,为例,它的定点数和浮点数编码形式差别很大,因此,变量要先定义再使用。变量定义的目的就是告知计算机以何种因此,变量要先定义再使用。变量定义的目的就是告知计算机以何种编码形式组织变量所标示的存储单元以正确存储数据。此外,编码形式组织变量所标示的存储单元以正确存储数据。此外,printfprintf函数和函数和 s

15、canfscanf函数需用格式字符串确定数据的编码形式。函数需用格式字符串确定数据的编码形式。变量定义的目的return2.1.4 原码、反码和补码定点数在实际的编码时根据相应的编码规则常用原码、反码和补码三定点数在实际的编码时根据相应的编码规则常用原码、反码和补码三种编码方式。下面的讨论都假定编码长度为种编码方式。下面的讨论都假定编码长度为1 1个字节。个字节。原码的编码规则:用最高位表示数的符号(原码的编码规则:用最高位表示数的符号(0 0为正为正1 1为负),其后各位为负),其后各位表示该数的绝对值。表示该数的绝对值。例如:例如:-123-123的原码为的原码为1111 10111111

16、 1011 0.523 0.523的原码为的原码为0100 00100100 0010 -0.523 -0.523的原码为的原码为1100 00101100 0010反码反码的编码规则:正数的反码与原码相同;负数反码的编码规则:正数的反码与原码相同;负数的反码符号位为的反码符号位为1 1,数值位在原码相应位的基础上,数值位在原码相应位的基础上取反(取反(0 0变变1 1,1 1变变0 0)。)。例如:例如:-123-123的反码为的反码为1000 01001000 0100 0.523 0.523的反码为的反码为0100 00100100 0010 -0.523 -0.523的反码为的反码为1

17、011 11011011 1101补码补码的编码规则:正数的补码与原码相同;负数补码的编码规则:正数的补码与原码相同;负数的补码为其反码加的补码为其反码加1 1(负数的补码为(负数的补码为“反码补反码补1”1”)。)。例如:例如:-123-123的补码为的补码为1000 01011000 0101 0.523 0.523的补码为的补码为0100 00100100 0010 -0.523 -0.523的补码为的补码为1011 11101011 1110例2-1 求0的原码、反码与补码解:解:0 0的符号可正可负。的符号可正可负。+0+0的原码的原码00000000, -000000000, -0

18、的原码的原码1000000010000000+0+0的反码的反码00000000, -000000000, -0的反码的反码1111111111111111+0+0的补码的补码00000000, -000000000, -0的补码的补码0000000000000000注意:计算注意:计算-0-0的补码在反码加的补码在反码加1 1时符号位参与运算,得数为时符号位参与运算,得数为100000000,100000000,但编码长度只有但编码长度只有1 1个字节,最高位的进个字节,最高位的进1 1因溢出自动丢失。因溢出自动丢失。例2-2 求-123,121,-2的补码解:解:-123-123的补码为的

19、补码为1000 01011000 0101121121的补码为的补码为0111 10010111 1001(同(同121121的原码)的原码)-2-2的原码为的原码为1000 0010,1000 0010, 反码为反码为1111 11011111 1101 补码为补码为1111 11101111 1110。例2-3 用补码求121+(-123)的和-123-123的补码为的补码为1000 01011000 0101121121的补码为的补码为 0111 10010111 1001(同(同121121的原码)的原码)计算机中的定点数 用补码形式编码一方面,一方面,0 0的补码形式唯一;的补码形式

20、唯一;另一方面补码形式的定点数在计算两个数的和时运算规则非常简单:另一方面补码形式的定点数在计算两个数的和时运算规则非常简单:只要符号位参与运算忽略最高位(符号位)的进位,就可以得到和的只要符号位参与运算忽略最高位(符号位)的进位,就可以得到和的补码。一般情况下,两数相加时,要先判断出和的符号,再决定究竟补码。一般情况下,两数相加时,要先判断出和的符号,再决定究竟是相加还是相减,计算过程非常复杂。是相加还是相减,计算过程非常复杂。C语言中数值数据的类型计算机中整数用补码形式的定点整数编码,计算机中整数用补码形式的定点整数编码,C C语言中用关键字语言中用关键字intint定义定义一个整型变量;

21、一个整型变量;计算机中小数用浮点数形式编码,计算机中小数用浮点数形式编码,C C语言中用关键字语言中用关键字floatfloat定义一个浮定义一个浮点型变量。点型变量。变量的初始化在定义变量时,可以用在定义变量时,可以用“变量名变量名= =初值初值”的形式给变量赋初值,也称的形式给变量赋初值,也称变量的初始化。变量的初始化。例如:例如: intint i = -123, j; i = -123, j; 语句定义了两个整型变量语句定义了两个整型变量i i、j j,并且变量,并且变量i i所标示的内存单元中存储了所标示的内存单元中存储了-123-123定点整数的补码形式。定点整数的补码形式。flo

22、at f, m = -123; float f, m = -123; 语句定义了两个浮点型变量语句定义了两个浮点型变量f, mf, m,并且变量,并且变量m m 所标示的内存单元中存储了所标示的内存单元中存储了-123-123的浮点数形式。的浮点数形式。return2.2 计算机中整数的运算法则计算机中整数的编码形式为补码形式的定点整数,因此补码形式的定计算机中整数的编码形式为补码形式的定点整数,因此补码形式的定点整数的运算规律也就是计算机中整数的运算法则。点整数的运算规律也就是计算机中整数的运算法则。为使讨论简明,假设定点整数的编码长度为为使讨论简明,假设定点整数的编码长度为1 1个字节。个

23、字节。补码的符号位可以参加运算补码的符号位(最高位)其实是位权值为负的特殊数值位。补码的符号位(最高位)其实是位权值为负的特殊数值位。例如:例如:-123-123的补码为的补码为 1000 01011000 0101-1-1的补码为的补码为1111 1111 11111111如如121121的补码为的补码为0111 10010111 1001整数的范围把符号位理解为特殊的数值位后,补码把符号位理解为特殊的数值位后,补码1000000010000000是补码能表示的最小是补码能表示的最小整数即整数即-128-128(-128+0)-128+0)。因此码长因此码长1 1个字节的补码形式的定点整数能

24、够表示的整数的范围是从个字节的补码形式的定点整数能够表示的整数的范围是从- -128128至至127127,共,共256256个数。(个数。(8 8位的二进制串也只有位的二进制串也只有256256种状态)。种状态)。例2-4 127+1=?和为和为128128肯定不正确,因为此时的补码能表示的最大值是肯定不正确,因为此时的补码能表示的最大值是127127。符号位参与运算,向符号位的进符号位参与运算,向符号位的进1 1是是128128,但补码规定符号位的位权值,但补码规定符号位的位权值为负的,因此和为为负的,因此和为-128-128。(和应为。(和应为128128,现在却是,现在却是-128-1

25、28,和与正确结,和与正确结果相差了果相差了256256。)。)例2-5 127+127=?-128+64+32+16+8+4+2=-2-128+64+32+16+8+4+2=-2例2-6 -128-1= ?0+64+32+16+8+4+2+1=1270+64+32+16+8+4+2+1=127和为和为127127。(。(-128-128加加-128-128是是-256-256,但是进位后丢失,与正确结果相差,但是进位后丢失,与正确结果相差- -256.256.)例2-7 127-1= ?0+64+32+16+8+4+2=1260+64+32+16+8+4+2=126和为和为126126。(向符号位进。(向符号位进1 1是是128128,符号位中的,符号位中的1 1是是-128-128,因此符号位应,因此符号位应该是该是0 0(128-128128-128), ,计算时表现为符号位向前进计算时表现为符号位向前进1 1后得后得0 0,因此忽略进,因此忽略进位后,结果正确。)位后,结果正确。)综合以上讨论,得到以下结论:1.1.码长为码长为1 1个字节的补码形式的定点整数,取值范围从个字节的补码形式的定点整数,取值范围从-128-128到到127127,并且它们,并且它们首尾相连构成一个环首尾相连构成一个环(-128-1=127,127+1=-128)(-1

温馨提示

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

评论

0/150

提交评论