- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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之后有进位的,要一直往前进位,包括符号位!(这和反码是不同的!)
您可能关注的文档
- Unit9__Section__A(Grammar____focus-3c)精品课件讲义.ppt
- Unit13_Section2_SavetheSharks拯救鲨鱼讲义.ppt
- Unit14Careers讲义.ppt
- LTE基站站点安装实施规范讲义.docx
- unit16Householdappliance讲义.ppt
- Unit12015年九年级英语第一单元练习题讲义.docx
- LTE开机搜索与随机接入工作过程讲义.doc
- CT读片精讲讲义.pptx
- UnitTwoCharlieChaplin讲义.ppt
- Unity-Pro编程培训教程第03章-项目设定讲义.ppt
- 2024至2030年热轧带筋钢筋项目投资价值分析报告.docx
- 2024年肉桂调料项目可行性研究报告.docx
- 2024至2030年塑胶缝纫机角形前盖项目投资价值分析报告.docx
- 2024年中国墙装式90弯头市场调查研究报告.docx
- 2024年丝制棉项目可行性研究报告.docx
- 2024年真空咖啡壶项目可行性研究报告.docx
- 2024至2030年洁霉素渣项目投资价值分析报告.docx
- 2024至2030年中国不锈钢多用剪行业投资前景及策略咨询研究报告.docx
- 2024至2030年中国综合射频水处理器行业投资前景及策略咨询研究报告.docx
- 2024至2030年中国预热塞行业投资前景及策略咨询研究报告.docx
文档评论(0)