浮点型在内存中的存储

//对于float在IEE754中存储方式
	float a = 5.5;
	//二进制   101.1
	//(-1)*0  *  1.011  *  2^2
	//(-1)*S  *    M    *  2^E
	//S占一位,E占8位(要加上127),M占23位(小数点后的二进制数)  对于float 32位
	// S=0,M=1.011,E=2
	//E=E+127
	//E 10000001
	//存储在内存中
	//0 10000001 01100000000000000000000
	//0100 0000 1011 0000 0000 0000 0000 0000
	//4 0 b 0 0 0 0 0
	//40 b0 00 00
	return 0;

 

//取出时
//1.E不全为0和1
//怎么存的怎么取
//2.E全为0
//0 00000000 01100000000000000000000
//=  + - 0.011*2^-126
//3.E全为1
//0 11111111 01100000000000000000000
//= + - 1.011*2^128
//表示一个正负无穷大的数字

来个例题

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int n = 9;
	//0000 0000 0000 0000 0000 0000 0000 1001//补码
	
	//对于*p来说
	//0 00000000 00000000000000000001001
	//E全为0
	//(-1)^0  * 0.00000000000000000001001 * 2 ^-126  无限接近0
	
	//将n的地址强制转换成float*类型给 *p
	float* p = (float*)&n;

	printf("n=%d \n", n); //9
	printf("*p=%f \n", *p);//0.000000


	*p = 9.0;
	//(-1)^0 * 1.001 * 2^3
	// 0    3+127       001
	//0   10000010   00100000000000000000000
	//对于n来说
	//0100 0000 1000 1000 0000 0000 0000 0000  补码(原码)
	//1091567616
	printf("n=%d \n", n); 
	printf("*p=%f \n", *p);//9.0
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
浮点型数据在内存存储方式是按照IEEE 754标准进行存储的。IEEE 754标准规定了两种浮点数的表示方法:单精度浮点数和双精度浮点数。其,单精度浮点数占用4个字节,双精度浮点数占用8个字节。 在IEEE 754标准,浮点数的存储格式由三部分组成:符号位、指数位和尾数位。其,符号位用来表示浮点数的正负,指数位用来表示浮点数的数量级,尾数位用来表示浮点数的精度。 具体来说,单精度浮点数的存储格式如下所示: | 31 | 30 - 23 | 22 - 0 | |----|---------|--------| | S | E | M | 其,S表示符号位,占用1个bit;E表示指数位,占用8个bit;M表示尾数位,占用23个bit。双精度浮点数的存储格式类似,只是指数位和尾数位的长度不同。 在计算机,浮点数的存储方式是按照二进制补码进行存储的。具体来说,符号位用0表示正数,用1表示负数;指数位和尾数位都用二进制补码表示。 举个例子,如果要将3.14这个单精度浮点数存储到计算机,首先需要将3.14转换成二进制数。具体来说,可以使用以下方法进行转换: 3.14 = 11.0010001111...(二进制) 然后,根据IEEE 754标准的规定,将上述二进制数按照符号位、指数位和尾数位的顺序存储到计算机。具体来说,可以将上述二进制数转换成以下形式: | 0 | 10000000 | 10001100100011110101110 | |---|----------|------------------------| | S | E | M | 其,符号位S为0,表示正数;指数位E为10000000,表示指数为128(因为E需要加上一个固定的偏移量127,才能表示实际的指数值);尾数位M为10001100100011110101110,表示尾数为1.5707964(因为M需要除以2的23次方,才能表示实际的尾数值)。 因此,3.14这个单精度浮点数在计算机存储方式为: 01000000000100110010001111010111
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值