C语言基础知识:数据在内存中的存储解析(整数,浮点数)

简介: C语言基础知识:数据在内存中的存储解析(整数,浮点数)

和黛玉学编程..............>


整数在内存的存储

 之前就说过,数字二进制有3种保存方法,原码,反码,补码;而电脑存储整数的时候使用补码,这是因为cpu中只有加法器

 三种表示方法都有符号位和数字位,也就是signed 和unsigned ,有符号位就是正负区别啦

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

2.负数原码:按照二进制表示的

         反码:符号位不变,其他按位取反

        补码:反码基础上加一

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

 

大小端

超过一个字节的数据在内存中存储的时候就有存储顺序的问题,按照不同的存储顺序我们分为大端字节和小端字节

大端存储模式:数据的低位字节内容保存在内存的高地址,高位字节内容保存在内存的低地址

小端存储模式:和上面相反

为什么要有这个大小端呢?

 在计算机系统中,我们是以字节为单位的,每个地址单元对应着一个字节,一个字节有8个比特位,但是在C语言中有8比特的char,还有16比特的short以及32比特的Long类型(一些编译器), 对于16或者32位的处理器,必然存在一个如何将多个字节安排的问题

 

浮点数在内存中的存储

举例:5.0,二进制是101.0,相当于1.01x2^2,S=0;M=1.01;E=2

        5.5,二进制是101.1,因为0.5是1x2^-1,表示的话就是(-1)^0 *1.011*2^2

但是总有些数字可能需要100位1000位才能表示出来,所以有些数字存储的时候与实际的有 误差

浮点数存的过程

M:前面说过,M是1到2之间的,所以M可以写成1.xxxxxx,其中xxxxx表示小数部分,所以在计算机内部保存的时候,默认第一位总是1 ,因此可以被舍去,只保存后面的部分,这样子可以节省一位有效数字,存储的范围也就大了。

E:

如果E为8位,它的取值范围为0~255;如果E为11位,它的取值范围为0~2047。但是,我

们知道,科学计数法中的E是可以出现负数的,所以IEEE 754规定,存⼊内存时E的真实值必须再加上⼀个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023。⽐如,2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即10001001

在内存中分为三种情况

1.E不全为0或者不全为1:

           指数E的计算值减去127(或者1023),得到真实值,再将有效数字M前加上第一                位的1

2.E全为0;

           浮点数的指数E等于1-127(或者1-1023)即为真实值,有效数字M不再加上第⼀位        的 1,⽽是还原为0.xxxxxx的⼩数。这样做是为了表⽰±0,以及接近于0的很⼩的数字。  

3.E全为1:

         如果有效数字M全为0,表⽰±⽆穷⼤(正负取决于符号位s

 

 

相关代码你们可以自己试试呀

#include <stdio.h>
int main()
{
int n = 9;
float *pFloat = (float *)&n;
printf("n的值为:%d\n",n);
printf("*pFloat的值为:%f\n",*pFloat);
*pFloat = 9.0;
printf("num的值为:%d\n",n);
printf("*pFloat的值为:%f\n",*pFloat);
return 0;
}

就到这里啦,如果对你有帮助,看希望可以收到你的小赞,你的赞将给创作者的我带来好多天的开心喲。

 


相关文章
|
17小时前
|
C语言
C语言进阶⑫(指针下)(指针和数组笔试题解析)(杨氏矩阵)(中)
C语言进阶⑫(指针下)(指针和数组笔试题解析)(杨氏矩阵)
10 0
|
17小时前
|
C语言
C语言进阶⑫(指针下)(指针和数组笔试题解析)(杨氏矩阵)(上)
C语言进阶⑫(指针下)(指针和数组笔试题解析)(杨氏矩阵)
10 0
|
17小时前
|
存储 C语言
C语言进阶⑩(数据的存储)数据类型_介绍+存储_大小端(知识点+笔试题)(下)
C语言进阶⑩(数据的存储)数据类型_介绍+存储_大小端(知识点+笔试题)
7 0
|
17小时前
|
存储 编译器 C语言
C语言进阶⑩(数据的存储)数据类型_介绍+存储_大小端(知识点+笔试题)(中)
C语言进阶⑩(数据的存储)数据类型_介绍+存储_大小端(知识点+笔试题)
8 0
|
2天前
|
存储 Java 程序员
【Python 的内存管理机制专栏】深入解析 Python 的内存管理机制:从变量到垃圾回收
【5月更文挑战第18天】Python内存管理关乎程序性能与稳定性,包括变量存储和垃圾回收。变量存储时,如`x = 10`,`x`指向内存中值的引用。垃圾回收通过引用计数自动回收无引用对象,防止内存泄漏。了解此机制可优化内存使用,避免循环引用等问题,提升程序效率和稳定性。深入学习内存管理对成为优秀Python程序员至关重要。
【Python 的内存管理机制专栏】深入解析 Python 的内存管理机制:从变量到垃圾回收
|
5天前
|
机器学习/深度学习 算法 Linux
xenomai内核解析--实时内存管理--xnheap
Xenomai是一个实时操作系统(RTOS)层,用于Linux,旨在提供确定性的任务调度和服务。其内存管理机制包括一个名为xnheap的内存池,确保内存分配和释放的时间确定性,以满足硬实时系统的严格需求。
46 0
xenomai内核解析--实时内存管理--xnheap
|
5天前
|
存储 编译器 程序员
C语言:数据在内存中的存储
C语言:数据在内存中的存储
15 2
|
5天前
|
缓存 Java 编译器
JMM内存模型 volatile关键字解析
JMM内存模型 volatile关键字解析
11 0

推荐镜像

更多