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

目录

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

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

2.整型家族

3.浮点数家族

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

5.指针类型

6.空类型

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

1.二进制

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

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

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

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


一.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.正整数的原码,反码,补码相同

如:

数据在内存中的存储(超详细讲解)_第1张图片

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

如:数据在内存中的存储(超详细讲解)_第2张图片


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

数据在内存中的存储(超详细讲解)_第3张图片

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

数据在内存中的存储(超详细讲解)_第4张图片

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


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

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

存储的顺序分为两种:

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

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

数据在内存中的存储(超详细讲解)_第5张图片

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

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

 数据在内存中的存储(超详细讲解)_第6张图片

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

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

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

代码实现:

#include 

int main()
{
	int num = 1;
	
	if (*((char*)&num) == 1)
	{
		printf("小端字节序存储\n");
	}
	else
	{
		printf("大端字节序存储\n");
	}

	return 0;
}

运行结果:

数据在内存中的存储(超详细讲解)_第7张图片



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

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

有符号和无符号的区别:

数据在内存中的存储(超详细讲解)_第8张图片

数据在内存中的存储(超详细讲解)_第9张图片

你可能感兴趣的:(C语言,c语言)