在内存中,整数和浮点数是如何存储的

本文解释了整数(如int、short、long)和浮点数在内存中的存储结构,包括字节和比特的关系,以及大端存储和小端存储的区别。同时介绍了IEEE754标准对浮点数的存储方式,包括符号、指数和尾数的表示。文章强调了这些知识对理解计算机原理和编程的重要性。
摘要由CSDN通过智能技术生成

这篇博客主要是来帮助大家理解在内存里,整数与浮点数的存储形式。

、我们得先知道整数与浮点数存储形式的不同有什么实际意义:

1、更好地理解计算机的工作原理。
2、可以解决一部分在编程中遇到的问题。

、整数的存储。

1、我们先了解数据所占内存的表示,字节(Byte)是计算机信息技术用于计量存储容量的一种计量单位,比特(bit)就是是计算机表示数据最小的单位,而它们的进制关系为:1byte=8bit,在通常情况下int类型的数在内存中占4字节,也就是32个比特位。

2整数有着int,short,long,long long前缀型,整形数据以二进制的形式存储于内存中,一个2进制位就是一个bit位,那么一个int型的数据就会占32个2进制位,一般来说32位2进制位来观察数字太长了,以16进制来表示数字,例如1–0X00000001比较方便;

3大端存储与小端存储:为什么会存在大端与小端存储呢?-----这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着⼀个字节,⼀个字节为8bit位,但是在C语⾔中除了8bit的 char 之外,还有16bit的 short 型,32bit的 long 型(要看具体的编译器),另外,对于位数⼤于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度⼤于⼀个字节,那么必然存在着⼀个如何将多个字节安排的问题。因此就导致了⼤端存储模式和⼩端存储模式。 上面我们知道了整数在内存里的存储,但是内存有高地址,有低地址,整数的存储都是先存较小的二进制位,例如0x00000001,如果1存于低地址处我们称为小端存放,反之则为大端存放;

4下面是一个可以判断编译器是大小端存储的简单代码:

#include<stdio.h>

int test()
{
	int a=1;
	return *(char*)&a;
}
int main()
{
	int ret=test();
	if(ret==1)
		printf("小");
	else 
		printf("大");
	return 0;
 } 

总之不同的编译器可能出现不同的存储方式。
、浮点数的存储:
浮点数的存储方式与整数有很大的不同;
1、根据国际标准IEEE(电⽓和电⼦⼯程协会)754,任意⼀个⼆进制浮点数V可以表⽰成下⾯的形式:
(-1)S* M* 2E
例如:5.5写成2进制就是101.1,再将其化为标准式(-1)0* 1.011* 22;M永远>=1且<2,那么用这个式子表达的浮点数里-1,M的小数点前面的1,2为公共部分,计算机在存储浮点数时只会存储S(0/1)(一个2bit位),E(unsigned)(32位8个2bit位)(64位11个2bit位),M小数点后的数(32位23个bit位)(64位52个bit位)。但是我们知道E的值可能会出现负数,那么这时IEEE 754规定存入E的真实值时必须再加上一个中间值使这个值大于0,8位的E中间值为127,11位的E中间值为1023。例如存放5.5----0 10000001 01100000000000000000000
2、我们将存入的浮点数取出也是有一定规则的
1、当存入的E不全为1/0时按照上面的反过程就行。
2、当存入的E全为0时,那么真实的2E即21-127会非常的小,我们默认E=1-127,有效位M不再加上前面去掉的1,而是还原为0.XXXXXX的小数,表示接近于0的很小的数字。
3、同样当存入的E全为1时,表示无穷大。

  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值