c语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?
float在内存中的存储方式如下图所示:
double在内存中的存储方式如下图所示:
无论是单精度还是双精度在存储中都分为三个部分:
1.符号位(sign) : 0代表正,1代表为负
2.指数位(exponent):用于存储科学计数法中的指数数据,并且采用移位存储
3.尾数部分(mantissa):尾数部分
首先来看float类型(以2.25为例)
步骤一:符号位(占1个bit位)的数值
很容易看出此数为正数,因此符号位为0。
步骤二:指数位(占8个bit位)的数值
第一步:先将十进制的2.25转换成二进制0100.01;
第二步:将100.01用二进制的科学计数法表示为1.001;
第三步:将第二步所得数值写成指数形式1.001*(2^2);
第四步:将指数数值2+127=129,将129转化成二进制形式(1000 0001)写到指数部位。
步骤三:尾数部分(占23个bit位)的数值
将步骤二第二步中所得的数1.001,小数点后的三位数001写到指数部位,剩下的位用0补齐即可。
所以单精度浮点数2.25在内存中的表示方式为:
0 1000 0001 00100000000000000000000
再来看double类型(还是以2.25为例)
步骤一:符号位(占1个bit位)的数值
很容易看出此数为正数,因此符号位为0。
步骤二:指数位(占11个bit位)的数值
第一步:先将十进制的2.25转换成二进制0100.01;
第二步:将100.01用二进制的科学计数法表示为1.001;
第三步:将第二步所得数值写成指数形式1.001*(2^2);
第四步:将指数数值2+1023=1025,将129转化成二进制形式(100 0000 0001)写到指数部位。
步骤三:尾数部分(占52个bit位)的数值
将步骤二第二步中所得的数1.001,小数点后的三位数001写到指数部位,剩下的位用0补齐即可。
所以双精度浮点数2.25在内存中的表示方式为:
0 100 0000 0001 0010000000000000000000000000000000000000000000000000
高压变压器的应用范围
印度拟强制手机支持电视信号接收,三星、高通等联合反对
新型体感试衣镜为服装店带来了新的商业机遇
密码指纹锁有多少种提升用户体验的方式
“自动驾驶”时代的“春秋五霸”到底谁能胜出?
在C语言中,如何分配浮点数的存储方式?
2012年上半年中国消费电子市场分析
GTC23 | 百余家合作伙伴将 NVIDIA Clara AI 医疗平台带向全球
层次式原理图是如何绘制的
STM32的国产替代者:航顺的HK32F103VET6和HK32F030M
2017款长安福特翼虎车发动机故障灯异常点亮
采购弹簧疲劳试验机有什么注意事项?
在NGC上玩转图像分割!NeurIPS顶会模型、智能标注10倍速神器、人像分割SOTA方案、3D医疗影像分割利器应有尽有
看完四个有趣的街头潮流科技展台 感觉人一下子到了未来
郭台铭表明不再当董事长 接班人选3选1
手机电池充电、放电原理与电路结构讲解,全网唯一(修改版)
在PSIM中进行VHDL的联合仿真
一位工程师在华为二十年职业生涯中的12件趣事
全电压恒功率高压线性恒流IC SM2098E高压线性方案的应用
基于LTC2320 SAR ADC 系列的评估电路板 DC2395A