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

1.整数在内存中的存储

整数的2进制表示有原码、反码和补码,但是在内存中的存储是补码。下面我就介绍下原码、反码和补码。

三种表示方法均有符号位和数值位,符号位为最高位,其中“1”表示负,“0”表示正。其余位为数值位。

正整数的原码、反码和补码都是一样的。

负整数的三种表示方法各有不同。

原码:直接将正负整数翻译为2进制的就是原码

反码:原码的符号位不变,其余按位取反

补码:将反码加一变为补码

举例:写出-1的原码、反码和补码

int类型4个字节,32个bit位。

原码:10000000000000000000000000000001

反码:11111111111111111111111111111111110

补码:11111111111111111111111111111111111

2.大小端存储

什么是大小端?

其实超过一个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们
为大端字节序存储和小端字节序存储,下面是具体的概念:
大端存储模式:就是指数据的低位字节保存在内存的高地址处,数据的高位字节保存在内存的低地
址处。
小端存储模式 就是指数据的低位字节保存在内存的低地址处,数据的高位字节保存在内存的高地
址处。
举例:
#include<stdio.h>
int main()
{
	int a = 0x11223344;

	return 0;
}

通常情况下,我们计算机都是小端存储

3.浮点数在内存中的存储

浮点数的类型有float,double,long double类型。

根据规定,任意一个二进制浮点数V可表示为:

表示符号位。当S=0时,V为正数;S=1时,V为负数。
M表示有效数字。M的取值范围为1<=M<2。
表示指数。

举例:


十进制5.5写成二进制是101.1->科学计数法:1.011*2^2

根据上面的公式可得,S=0,M=1.011,E=2。(如果为-5.5,那么S=1,其余一样)


规定:


对于32位的浮点数,最高位存储符号位S,接着的8位存储指数E,剩下的23位存储有效位M。

对于64位的浮点数,最高位存储符号位S,接着的11位存储指数E,剩下的52位存储有效位M。


对于有效位M

IEEE 754 规定,在计算机内部保存M时, 默认这个数的第一位总是1,因此可以被舍去,只保存后面的小数部分 。比如1.11,计算机只保留11,等到读取时,再加上1

对于指数E
E为无符号整数,所以E为8位时,取值范围为0-255,E为11位时,取值范围为0-2047。但是科学计数法中可以出现负数,所以规定,必须加上 中间值。对于8位的E,中间数127,对于11位的E,中间数是1023。比如2^10,那E=10,但必须保存为10+127=137,即10001001

对于取值范围,我们取E为8位来讲解

有符号位                                                               无符号位


over~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值