例题+浮点数在内存中的存储

浮点数的存储

例题

int main()
{
	unsigned int i;
	for (i = 9; i >= 0; i--)
	{
		printf("%u\n", i);
	}
	return 0;
}

运行结果如下
在这里插入图片描述
unsigned int 类型大小是0~2^32,永远为正数,符合for循环的条件,当i为-1时,因为i为无符号类型,此时i的补码为11111111111111111111111111111111,
转化为十进制为4,294,967,295


例题

int main()
{
	char a[1000];
	int i;
	for (i = 0; i < 1000; i++)
	{
		a[i] = -1 - i;
	}
	printf("%d", strlen(a));
	return 0;
}

在这里插入图片描述
有符号型范围为-128~127
a[0]=-1
a[1]=-2
a[2]=-3
a[3]=-4
a[4]=-5
a[5]=-6
……
a[127]=-128
a[128]=127
……
strlen()函数是求\0之前的大小,\0的ASCII值为0,所以在0前共有255个


例题

unsigned char i = 0;
//范围为0~255
int main()
{
    for (i = 0; i <= 255; i++)
    {
        printf("hello world\n");
    }//死循环
    return 0;
}

在这里插入图片描述


接下来讲讲浮点型在内存中的存储
浮点型在内存中的存储和整形的存储是不一样的,它们是以以下形式存储的:
(-1)^S * M * 2^E

  • S为0时,浮点数为正数;S为1时,浮点数为负数
  • M存储有效数字,大小在1到2之间
  • E为指数位

在32 位中,最高一位存储S,其次数8位存储E,剩余23位存储M
在这里插入图片描述
存入时:其中E为无符号整数,有时E为负数需要加中间数,中间数为127,例如为-3时,需要加127为124转化为二进制存入内存中。
取出时:E分为三种情况

  • E不全为0或不全为1时,存储的值减去127即可,有效数字M加1
  • E全为0时,有效数字不加1,数值接近0很小的数
  • E全为1时,M全为0,数值无穷大
    E不全为0或不全为1为主要情况,E全为0和E全为1这里不做过多了解

举个例子
5.5怎么存入内存当中
在这里插入图片描述
为正数,S为0
E为2+127=129,转换为二进制1000 0001
M减去1后为有效值存入,01100000000000000000000
整合
01000000101100000000000000000000

例题

int main()
{
	int n = 9;
	//00000000000000000000000000001001
	//0 00000000 00000000000000000001001
	//E全为0,1-127=-126
	//0.00000000000000000001001接近0
	float* pFloat = (float*)&n;
	printf("n的值为:%d\n", n);//9
	printf("*pFloat的值为:%f\n", *pFloat);//0.000000
	*pFloat = 9.0;
	//1001.0---1.001*2^3
	//S=0,E=3+127=130,M=001
	//0 1000 0010 00100000000000000000000
	printf("num的值为:%d\n", n);//1,091,567,616
	//01000001000100000000000000000000
	printf("*pFloat的值为:%f\n", *pFloat);//9.000000
	return 0;
}

以上就是对浮点数的总结,欢迎大家来指证错误

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值