课本练习p2.96 p2.97
浮点数
- float 单精度浮点数(32位)
- double 双精度浮点数(64位)
练习对应书上内容P78--P81页
知识点是IEEE浮点表示
符号(sign):s决定这个数是负数(s=1)还是正数(s=0),而对于数值0的符号位解释做特殊情况处理。
尾数(significand):M是一个二进制小数,它的范围是,或者是。
阶码(exponent):E的作用是对浮点数加权,这个权重是2的E次冪(可能是负数)。
对于float而言,符号位用1位表示,尾数M用8位表示,阶码E用23位表示。而对于double而言,符号位1位,尾数11位,阶码52位
文字描述可能有些不太好理解,配上书本p78页的图就可以更好地理解。
题目要求
/*
*Compute (int)f.
*If conversion causes overflow or f is NaN,return 0x80000000
*/
int float_f2i(float _bits f);
对于浮点数f,这个函数计算(int)f.如果f是NaN,向0舍入。如果f不能用整数表示,那么函数应该返回0x80000000.
- 对于浮点数f,这个函数计算(float)f的位级表示.
/*Compute (float)i*/
float_bits float_i2f(int i);
课上练习1
课上练习2
课上练习3
课上练习4
遇见的问题
- 课上做实践的时候被段地址已转储。
课下做实验楼的时候段错误
解决和学习。
首先明白段错误的定义;段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址、访问了系统保护的内存地址、访问了只读的内存地址等等情况。
根据定义回头看自己的代码。发现应该是字符串复制哪里出现了问题。
-还有那些情况会出现段错误(核心已转储)的错误呢。在网上学习找到了相关博客,并进行学习。
- 访问不存在的内存地址
- 访问系统保护的内存地址
- 访问只读的内存地址
栈溢出
段错误的调试方法
- 使用printf输出信息
使用gcc gdb