整数和浮点数在内存中的存储

本文详细解释了整数在内存中的存储,涉及原码、反码和补码的区别,以及为何选择补码。同时介绍了浮点数的存储方式,遵循IEEE754标准,包括符号位、指数位和有效数字的处理。还讨论了字节序(大端和小端)的概念,并提供了示例代码和浮点数读取过程的规则。
摘要由CSDN通过智能技术生成

目录

整数在内存中的储存

储存的是二进制

1.二进制三种表现方法--原码、反码、补码

2.在内存中存放的是补码 

字节序判断

整数在内存中的存储范围

 浮点数在内存中的储存

浮点数的存储

IEEE754规定 

E是无符号整形 

浮点数读取的过程 


整数在内存中的储存

储存的是二进制

1.二进制三种表现方法--原码、反码、补码

  • 有符号位的整数,三种表示方法均有符号位和数值位这两部分
  • 其中符号位为最高位,0表示正数,1表示负数,剩下的就是数值位

1.正整数的原、反、补码都相同

2.负整数的原、反、补码各不相同

原码:将数值按照正负数的形式翻译成二进制

反码:原码除符号位,按位取反

补码:反码+1,也可以是原码 除符号位按位取反+1

也可以通过补码得到原码,补码取反+1得到原码

正整数:5
原码:00000000000000000000000000000101
反码:00000000000000000000000000000101
补码:00000000000000000000000000000101
负整数:-5
原码:10000000000000000000000000000101
反码:11111111111111111111111111111010
补码:11111111111111111111111111111011

2.在内存中存放的是补码 

  • 为什么存放的是补码

使用补码存放更加方便,可以将符号和数值域统一处理

大小端字节和字节序判断

1.大小端字节

大端字节序储存:把一个数据的低字节位的内容储存到高地址处,把数据的高字节位的内容储存到低地址处

小端字节序储存:把一个数据的低字节位的内容储存到低地址处,把数据的高字节位的内容储存到高地址处

字节序判断

#include<stdio.h>
int zj()
{
	int n = 1;
	//0x00 00 00 01
	if (*(char*)&n == 1)
	{
		return 1;
		//小端储存:01 00 00 00
	}
	else
	{
		return 0;
		//大端储存:00 00 00 01
	}
}
int main()
{
	int ret=zj();
	if(ret==1)
	{
		printf("小端");
	}
	else
	{
		printf("大端");
	}
	return 0;
}

整数在内存中的存储范围

char类型为一个字节,以char类型为例;

有符号整形signed char取值范围:-128~127;

无符号整形unsigned char 取值范围:0~255;

 浮点数在内存中的储存

浮点数的存储

浮点数的表示方式:

V:(-1)^s*M*2^E

例:3.5二进制表示(-1)^0*1.11*2^1

s=0,M=1.11,E=1

  • (-1)^s:表示符号位,当s=0时,V为正数,当s=1时,V为负数;
  • M :表示有效数字,取值范围为1<=M<2;
  • 2^E:表示指数位

浮点数的储存就是与S、M、E相关的值 ​​​E754

IEEE754规定 

  • 对于32位浮点数(float):最高的一位存储的符号位S,接着的8位存储指数E,剩下的23位存储有效数字M
  • 对于64位浮点数(double):最高的一位存储的符号位S,接着的11位存储指数E,剩下的52位存储有效数字M

E是无符号整形 

  • E为8位时,取值范围为0~255;
  • E为11位时,取值范围为0~2047;
  • 但在科学计数法中,E可以是负数,所以要加上一个中间值,8位的中间值为127,11位的中间值为1023

浮点数读取的过程 

  • E不全为0或不全为1时:指数E的计算值减去127(或1023),得到真实值,再将有效数字M前加上第一位1;
  • E全为0时:指数E等于1-127(或1-1023),即为真实值,有效数字不再加上第一位的1,表示正负0,以及接近于0很小的数字(正负取决于S);
  • E全为1时:如果数字M全为0,表示正负无穷大(正负取决于S)。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值