目录
1. 这篇博客将要讨论什么?
说来惭愧,作为计算机科班出身的人,计算机基础知识掌握并不扎实,这里的基础指的是计算机体系结构中的内容,诸如数据的表示和处理,如float的表示和运算等。看《CSAPP》方知人家老外把这个东西当成重中之重,大量详细的原理介绍,并配套大量例题。当初本科学的时候,很简单的了解了下概念而已,所以应该直接将《CSAPP》当做教材来用,里面习题全做,这样CS出来的基本知识将掌握的很扎实。
学艺不精的后果就在于:学而不思则罔。圣人太厉害了,总结得很到位。比如最近项目中涉及到浮点和定点的转换,自己就有点蒙,边看边实验,还算理解了,作文以记之。
一直以来,程序中接触的数据类型都是int整型,char字符型,float单精度浮点型,double双精度浮点型。看到浮点和定点一直不知道如何划分这个概念的范畴。以为浮点就是float表示小数,定点就是int可表示整数而已。经过学习明白了显然是错误的。应该是这样划分的:
- 浮点:小数点非固定的数,可表示数据范围较广,整数,小数都可表示。包含float,double;
- 定点:小数点固定,可表示整数,小数。int本质是小数点位于末尾的32位定点数而已;
有了这个认识,后面的讨论就可以开始了。
2. 浮点数的表示法
浮点数以float为例讨论。
2.1 IEEE 754标准
规定浮点数格式为: V = ( − 1 ) s × M × 2 E V = (-1)^s×M×2^E V=(−1)s×M×2E
- s表示符号位,当s=0,V为正数;当s=1,V为负数
- M表示尾数, 2 > M > = 1 2>M>=1 2>M>=1
- E表示阶码
将其封装到32位的字中:
符号位 | 阶码 | 尾数 |
---|---|---|
1 | 8 | 23 |
根据32位数计算为十进制: V = ( − 1 ) s × ( 1. M ) × 2 ( E − 127 )