int main() {
int number = 9;
printf("%d\n", number);
float* n = (float*)&number;
printf("%f\n", n);
*n = 9.0;
printf("%d\n", number);
return 0;
}
同样是打印number ,以整形的形式打印出来和以浮点型的形式打印出来却截然不同,这就要涉及到数据在内存中储存的问题了。首先我们来看int number 和 float n 的原反补:
number的原反补都一样:00000000 00000000 00000000 00001001
浮点型在内存中的存储和整形不一样,n是这样表示的:(-1)^(0)*1.001*2^(126-126)。这是因为用二进制科学计数法表示,-1的0次方表示是整数,1次方就是负数,然后划到整形一样的二进制里就是:
正负位 2的几次方 有效位
0 00000000 000 0000 0000 0000 0000 1001
所以打印出来的数很小,0.0000000-》因为*2的-126次方了。
而在赋值9.0给n后,打印出来number的值有不一样了,我们来看:
9.0以浮点数打印应该是(-1)^(0)*1.001*2^(3 + 130)
0 10000010 001 0000 0000 0000 0000 0000
01000001000100000000000000000000
所以打印出来的数很大