c语言之浮点数
内存中的浮点数
**浮点数在内存中的存储方式为:符号位,指数,尾数
类型:- | 符号位:- | 指数:- | 尾数:- |
---|---|---|---|
float | 1位(第31位) | 8位(第23~30位) | 23位(第0~22位) |
double | 1位(第63位) | 11位(第52~62位) | 52位(第0~51位) |
float和double类型的数据在计算机内部的表示法是相同的,但是由于所占存储空间的不同,其分割能够表示的数值范围和精度不同
浮点数的存储示例
浮点数的转换
1.将浮点数转换成二进制
2.用科学计数法表示二进制浮点数
3.计算指数偏移后的值
注意:计算指数时需要加上偏移量,而偏移量的值和类型有关。
示例:对于指数6,偏移后的值如下:
float:127+6->133
double:1023+6->1029
10进制浮点数的内存表示
实数8.25的在内存中的float表示
—8.25的二进制表示:1000.01->1.00001*(2^3)
符号位:0
指数:127+3->130->10000010
小数:00001
—内存中的8.25的float的表述:
0100000100000100000000000000000000->0x41040000
浮点类型的秘密
1.float能表示的具体数字的个数和int相同
2.float可表示的数字之间不是连续的,存在间隙。
3.float只是一种近似的表示法,不能作为精确数使用。
4.由于内存表示法相对复杂,float的运算速度比int要慢得多。
注意:
double与float具有相同的内存表示法,因此double也是不精确的。由于double占用的内存较多,所以表示的精度要比float高。
总结
1.浮点类型与整数类型的内存表示法不同
2.浮点类型的内存表示更加的复杂
3.浮点类型是一种不精确的类型
4.浮点类型的运算速度较慢
编程实验
1.10进制浮点数的内存表示
2.float类型的不精确示例
RLqd-1623645832269)]
2.float类型的不精确示例
[外链图片转存中…(img-5xuho0nK-1623645832271)]