数据在内存中的存储

今天和大家分享数据在内存中的存储这一部分的知识

同样话不多说,正文开始:

1.整数在内存中的存储

关于整数在内存中的存储,需要原码反码补码,存储方式可以分成两个方面

(1)一个是无符号整数,在c语言中就是unsigned int类型

我们都知道在内存中存储的是整形的补码,无符号的整数的原码,反码,补码均相同

当需要拿出来时,其相应二进制序列无需再进行转换。

(2)一个是有符号整数,signed int类型,它区别与无符号整数的关键点在于符号位,也就是二进制位最前面的那个位,同样的,它在内存中存储的是补码,但当我们想要从内存中拿出这个数,就需要转换成原码。

举例:-1

原码:10000000 00000000 00000000 00000001

反码:011111111 111111111 111111111 111111110

补码:011111111 111111111 111111111 111111111

由原码得到补码我们可以按位取反在加一,同样由补码得到原码也是按位取反再加一

2.大小端字节和字节序判断

(1)大端

         小端

(2)

i是整形,占四个字节,假设左边是低地址,右边是高地址,在32位条件下

1有这两种存储方式

低      00  00  00  01     高

低      10  00  00  00     高

那这个时候我们将i的地址强制类型转换成字符指针的类型后解引用拿出第一个字节的值

就可以帮助我们判断该编译器是大端字节排序还是小端字节排列。

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

关于浮点数在内存中的存储由下题我们可以知道其存储方式与整形并不相同

在   IEEE754  中规定,所有浮点数都可以这样表示

-1)^n + m + e

m与e是相应进制下科学计数法表示的两大部分

以十进制为例,1.01 * 10^3

在这个式子中 ,m为1.01,e为 3。

而在内存中就要换成二进制进行存储,它的存储方式是这样的:

关于浮点数的存储还有一些特殊规定:

<1>关于存

(1)我们M一直是用科学计数法的方式,而且在二进制中,M总是大于等于1,小于2,因此我们存储时不存小数点前这一位,这样就可以提高内存中一位的精度

比如说:1.001   ,在内存中只存 001 ;1.010   ,在内存中只存 010。

(2)首先,E是一个无符号整数,但是我们知道在科学计数法中E是可能为负数的,因此

IEEE 754规定存入内存中时的E的真实值还要加上一个中间值,比如八位的E就需要加上一个中间值127,11位的E就需要加上一个中间值1023后才能存入内存之中

<2>关于取

当取E的时候有三种情况

(1)E不为全0或不为全1(常规情况),E就是存的值减去127或者1023,就可以得到E的真实值

(2)E为全0,如果E存入内存是全0,那E就是2的负127次方,是极小的情况

因此就代表着正负0,或无限接近于0很小数字的情况

(3)E为全1,同理由第二条,我们可以得到这种情况代表的是无穷大或无穷小的数。

博主以这个题为例,帮助大家更好的理解字符在内存中的存储;

为了方便解释和观看,四个打印分别对应1,2,3,4四个小题

1.打印变量n,你本身就是整形,结果自然是9,非常简单。

2.pFloat是解引用是浮点数,因此取的时候也要按照浮点数的规则去取

首先n是一个正整数在内存中原码,反码,补码均相同

即为 00000000  00000000  00000000  00001001

用存储浮点数的方式拿出来就是

        0  00000000  00000000000000000001001 

符合第二种特殊情况E为全0,毋庸置疑,打印出的结果是0;

3. 浮点数9.0在内存中的存储,我们先写出来(-1)^0 + 1.001 * 2^3 

E存进去是3+127=130 

      0  10000010  00100000000000000000000

以整数的形式打印,我们先看最高位也就是符号位,是0,那么打印整数的原码就是

      01000001 00010000 00000000  00000000

再将其转换成十进制即可

4.第四个相对简单,就是9.0,以浮点数的形式打印出来即可

结果如上。

好的,今天的知识分享到此结束,谢谢大家,各位,共勉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值