数据在内存中的存储(超详细讲解)

简介: 数据在内存中的存储(超详细讲解)

一.C语言中数据类型的介绍



1.c语言的内置类型及大小(单位字节)


char        字符数据类型     1

short       短整型      2

int           整型         4

long        长整型      4/8

long long   更长整型     8

float        单精度浮点数     4

double    双精度浮点数     8


2.整型家族


char          signed    char

                unsigned    char

char存储的时候是存储的对应的ASCII码值,所以也归为整型家族;

short         signed     short  [ int ]

                unsigned   short  [ int ]

int             signed     int

                unsigned   int

long          signed    long      [ int ]

                unsigned    long    [ int ]

long long      signed    long long    [ int ]

                   unsigned   long  long      [ int ]  


3.浮点数家族


float

double

long   double


4.自定义类型(构造类型)


数组类型     int   arr1[10]   ---->类型为  int   [10]

                  char   arr2[10]   ----->类型为  char   [10]

                  int   arr3[5]    ------>类型为  int   [5]


结构体类型   struct

                    struct {                                  

                             结构体所包含的数据成员,包括变量数组

                            }结构变量;//结构变量可以指定一个或则多个


                  例如:

                      struct

                            {

                             char  name[11];

                             char  sex[5];

                             int    age;

                            }Stu;


枚举类型      enum

               如:enum { red=1, oreange=2, yelloe=3, green=4,blue=5}


联合类型      union


5.指针类型


int*  p1

float*   p2

char*   p3

void*   p4

结构体指针

......


6.空类型


void  (表示空类型,无类型)

通常应用函数的返回类型,函数的参数,指针类型

void   test( )

{

      int  i = 0;

      printf("%d\n",i);

}  

void *   p


二.整型数据在内存中的存储



1.二进制


注意实际上整型数据在内存中的存储,计算等操作都是用的补码

整型数据的二进制的表现形式有3种

原码,反码,补码

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

如:599d7824f2eb471bbbfc628ac9292576.png


2.负数的原码,反码需计算


4544f2cb8b2a424094a68a3f1644b92b.png


2.整型数据在内存中的存储(示例)


10eb3bbac4aa43679fd9cc5cbfdc7b62.png


本质上数据在内存中是以二进制的形式存储的,但是在VS上为了方便展示,显示的是十六进制60930656d82145a58baa061ef32e8026.png


这里的存储顺序是:小端字节序存储(下面有数据字节序存储分类)



3.数据字节序存储分类(2种)


字节序:是以字节为单位 ---> 讨论存储

存储的顺序分为两种:

1.小段字节序存储:把一个数据的低位字节的内容,存储在低地址处,把高位字节的内容,存储在高地址处;

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

eff6a9592ada4fa9bb544db7020f131f.png

编程实现:检测VS上是哪种储存形式

----------------->思路:

b5b99df76b42423fa2aa9bcc81cc2dfa.png

所以可以打印出一个字节的内容

如果是 1 ,则是小端字节序存储

如果是 0 ,则是大端字节序存储

代码实现:

#include <stdio.h>
int main()
{
  int num = 1;
  if (*((char*)&num) == 1)
  {
    printf("小端字节序存储\n");
  }
  else
  {
    printf("大端字节序存储\n");
  }
  return 0;
}


运行结果:

448763b6a3094a6f8bbd880e6d168bbc.png


三.整型家族有符号和无符号的区别



char          signed    char

                unsigned    char


short         signed     short  [ int ]

                unsigned   short  [ int ]


int             signed     int

                unsigned   int


long          signed    long      [ int ]

                unsigned    long    [ int ]


long long      signed    long long    [ int ]

                   unsigned   long  long      [ int ]


我们所说的  short,  int  , long , long long 都是默认的是(有符号的)  signed  short  ,  signed  int , signed long ,   signed  long  long


但是char  到底是signed  char  还是 unsigned  char  我们不知道


但是在VS上char------>是signed    char

有符号和无符号的区别:

d0ed017d8146440da32d7acf01a824d2.png5387230d8310421b8b6197ec891d1ae0.png





目录
相关文章
|
2月前
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
760 0
|
2月前
|
存储 缓存 NoSQL
内存管理基础:数据结构的存储方式
数据结构在内存中的存储方式主要包括连续存储、链式存储、索引存储和散列存储。连续存储如数组,数据元素按顺序连续存放,访问速度快但扩展性差;链式存储如链表,通过指针连接分散的节点,便于插入删除但访问效率低;索引存储通过索引表提高查找效率,常用于数据库系统;散列存储如哈希表,通过哈希函数实现快速存取,但需处理冲突。不同场景下应根据访问模式、数据规模和操作频率选择合适的存储结构,甚至结合多种方式以达到最优性能。掌握这些存储机制是构建高效程序和理解高级数据结构的基础。
216 1
|
2月前
|
存储 弹性计算 固态存储
阿里云服务器配置费用整理,支持一万人CPU内存、公网带宽和存储IO性能全解析
要支撑1万人在线流量,需选择阿里云企业级ECS服务器,如通用型g系列、高主频型hf系列或通用算力型u1实例,配置如16核64G及以上,搭配高带宽与SSD/ESSD云盘,费用约数千元每月。
210 0
|
8月前
|
消息中间件 存储 缓存
kafka 的数据是放在磁盘上还是内存上,为什么速度会快?
Kafka的数据存储机制通过将数据同时写入磁盘和内存,确保高吞吐量与持久性。其日志文件按主题和分区组织,使用预写日志(WAL)保证数据持久性,并借助操作系统的页缓存加速读取。Kafka采用顺序I/O、零拷贝技术和批量处理优化性能,支持分区分段以实现并行处理。示例代码展示了如何使用KafkaProducer发送消息。
|
10月前
|
存储 编译器 数据处理
C 语言结构体与位域:高效数据组织与内存优化
C语言中的结构体与位域是实现高效数据组织和内存优化的重要工具。结构体允许将不同类型的数据组合成一个整体,而位域则进一步允许对结构体成员的位进行精细控制,以节省内存空间。两者结合使用,可在嵌入式系统等资源受限环境中发挥巨大作用。
324 12
|
11月前
|
监控 算法 应用服务中间件
“四两拨千斤” —— 1.2MB 数据如何吃掉 10GB 内存
一个特殊请求引发服务器内存用量暴涨进而导致进程 OOM 的惨案。
230 14
|
11月前
|
存储
共用体在内存中如何存储数据
共用体(Union)在内存中为所有成员分配同一段内存空间,大小等于最大成员所需的空间。这意味着所有成员共享同一块内存,但同一时间只能存储其中一个成员的数据,无法同时保存多个成员的值。
|
11月前
|
存储 C语言
数据在内存中的存储方式
本文介绍了计算机中整数和浮点数的存储方式,包括整数的原码、反码、补码,以及浮点数的IEEE754标准存储格式。同时,探讨了大小端字节序的概念及其判断方法,通过实例代码展示了这些概念的实际应用。
787 1
|
存储 编译器 C语言
【C语言篇】数据在内存中的存储(超详细)
浮点数就采⽤下⾯的规则表⽰,即指数E的真实值加上127(或1023),再将有效数字M去掉整数部分的1。
820 0