前言:本人为C语言初学者,学识尚浅,研究程度存在很大的局限性,眼界很窄。以下所有观点仅代表个人见解和思路,各位游刃有余的前辈可以给予批评和指正!各位与鄙人同路的学子可相互探讨、发表看法,交换观点!
(本文仅用于理解浮点数的储存,不会涉及其规定标准、浮点数的由来等无关内容)
其实这一切,都要从这串代码说起:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 9;
float* p = &a;
printf("%d\n", a);
printf("%f\n", *p);
*p = 9.0;
printf("%d\n", a);
printf("%f\n", *p);
return 0;
}
或许你这样认为,打印的应该是:
9 9.0 9 9.0
(因为我一开始也是这样以为的)
所以先在自己心里留个答案,那我们先来见证一下结果:
哈,很惊喜吧!接下来,我们就不得不探讨浮点数怎样在内存中储存:
对于整数来说,它们采取补码的方式储存,大于等于0的整数原反补码相同,小于0的整数补码 = 原码按位取反(符号位不变)+ 1,而 int 类型占4个字节。
浮点数分为:单精度浮点数(float - 4byte),双精度浮点数(double - 8byte)
而它们如何利用这些比特位来表示小数呢?
首先还是要先奉上公式:
V = (-1)^S * M * 2^E
先不要着急......V即表示浮点数的意思,而后面自然就是计算方法,我