C程序总结讲义.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C程序问题 abs()、fabs()函数取绝对值 abs()与fabs()函数都是去决定值函数,其区别为: 1.1 abs()函数接受一个整型的参数,并以Int值得形式返回这个参数的绝对值。 1.2 fabs()函数接受double类型的参数,并以double值的形式返回这个参数的绝对值。 1.3 abs()函数的函数原型位于头文件stdllib.h中。 1.4 fabs()函数的函数原型位于头文件math.h中。 #includelimts.h库文件 Limts.h库文件专门用于检测整形数据类型的表达值范围 例: UINT_MAX : 4294967295 或 65535 表unsigned int 十进制的最大值。 原码、反码、补码 原码: 如果机器字长为n,那么一个数的原码就是一个n位字长的二进制有符号数, 最高位为符号位,正数为0、负数为1。 剩下的n-1位为数值位,表示真值的绝对值。 不足n-1位的,小数在最低位右边加零;整数则在最高位左边加零用于补足n-1位。 例:+5. +5是正数,最高位为0 如果+5是int类型的数据,则可知int在机器中占有4个字节,共计32个bit位,bit0至bit31. 则 + 5 的原码为 0000 0000 0000 0000 0000 0000 0000 0101 -5. -5是负数,最高位为1 如果-5是int类型的数据,则可知int在机器中占有4个字节,共计32个bit位,bit0至bit31. 则-5的原码为1000 0000 0000 0000 0000 0000 0000 0101. 但是0的原码有两种,因0有 +0 和 -0 之分。 如果为 -0 且数据类型为int型。 则其原码为 1000 0000 0000 0000 0000 0000 0000 0000 如果为 +0 且数据类型为int型 则其原码为 0000 0000 0000 0000 0000 0000 0000 0000 原码的优缺点: 简单易懂 加减运算复杂 存在加减乘除四种运算,增加了CPU的复杂度 零的表示不唯一 注:对原码缺点的描述 二进制中减法可以当做 加法运算 比如 2- 3 (( 2 + (-3) 对于加减运算用原码表示为:例: 2 – 3 运算 数据类型为 char型。 可知char 类型占有1个字节共8位,则 2 的原码为 0000 0010 。– 3的原码为1000 0011. 则 2 – 3 运算用二进制表示为 0000 0010 + 1000 0011 结果为1000 0101 按照原码来计算 为- 5 这显然不对 利用补码进行运算: 2的补码为 0000 0010 -3 的补码为 1111 1101。 2 – 3 所得的补码为 1111 1111 1111 1111 二进制显示为负值按照转换原则:补码转原码补码取反加1得 1000 0001 = -1. 由补码和原码的上述计算可知,原码在某些场合不能直接进行加减运算,这无疑增加了原码的运算复杂度。 反码: 反码就是在原码的基础上进行取反操作,需要注意的是在进行取反时符号位是不变的。 例:char型数据 +5 的原码为 0000 0101 则其反码为 0111 1010 Char型数据 -5 的原码为 1000 0101 则其反码为 1111 1010 注:计算机不使用反码的原因 还是上述例子 2 – 3 。我们知道计算机的CPU中只有加法器没有减法器,2 – 3实际上可以表示成 2 + (-3) 2 的原码为 0000 0010 其对应的反码为 0000 0010 -3 的原码为 1000 0011 其对应的反码为 1111 1100 2 -3 = 0000 0010 + 1111 1100 = 1111 1110 取反为 1000 0001 对应为 -1 是正确的 但是为什么不使用反码,而使用补码呢 如下 当运行 1- 1 运算时 可知 0000 0001(1的反码) + 1111 1110(-1的反码) = 1111 1111 从上面我们可以看到 1111 1111 取反 为 10000 0000 这是有问题的 问题出现在 +0 和 -0 身上。计算机概念中是没有 正零和负零之分的。 于是就有了补码 1 -1 利用补码计算如下 0000 0001 + 1111 1111 = 0000 0000 运算规则: 正零? 负零? 这两个数其实都是0,但他们的原码却有不同的表示。 ? 但是他们的补码是一样的,都? 特别注意,如果+1之后有进位的,要一直往前进位,包括符号位!(这和反码是不同的!)

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档