数据(整形类)在内存中的储存

整形在内存中的储存方式

数据类型介绍:

在这里插入图片描述
在上述几种数据类型中,可分为两大类:

  • 第一大类:整形数据,以下的数据类型都可分为整形数据,
    因为char字符类型在进行存储的时候,存的是ASCII码值,是整形,所以可以将char类型归为整形类型。
    在这里插入图片描述
  • 第二大类:浮点数类型,在除了以下几种的浮点数类型,其实还存在:long double;等相似类型。
  • 在这里插入图片描述
  • 当然除了以上C语言内置类型,还存在自定义类型
    就是为自己构造类型,比如:
    在这里插入图片描述
    在其中数组类型是为 数据类型和元素个数组合起来,比如说:

int arr1[10]; //数组类型—> int [10];
int arr2[5]; //数组类型—> int [5];
char arr3[10]; //数组类型----> char[10];

其中arr1和arr2的数组类型是不一样的,如何分别其数组类型不同:就看其数据结构和元素个数,只要其中之一不同,其数组类型就不同。

  • 指针类型,如:

在这里插入图片描述
其中有一种比较特殊的指针类型:
void* 其特殊之处:

  1. 可以接受任意类型的地址。
  2. 不能进行解引用操作。
  3. 不能进行+ - 整数的操作。

整形在内存中的存储

不是在说在内存中的储存么?这么扯到数据结构上去了;
要知道当我们在创造了一个变量:就会在内存中开辟一块空间进行存储,而开辟一块多大的空间就取决于你要存储的变量的类型了。
比如:
我要存int类型的数据,就需要4个字节的空间;而如果是char类型的数据,就只需要1个字节的空间了。

现在我们来看看整形数据在内存中的储存,如果到现在我们浅浅的了解了在内存中是储存方式,接下来是我们一定需要了解到的:原码反码补码

首先我们知道计算机读取数据都是靠二进制,而整形数据的二进制有三种表达形式:原码、补码、反码。这三种表现方法均有符号位数值位,符号位是其二进制最高的一位,用“1”(正)或“0”(负)来表示,而数值位就是真实有效的值。
正数的原、反、补码都相同。
负数的原、反、补码都各不相同:
原码:直接将数据按照正负形式翻译成二进制序列。
反码:将已经翻译成二进制序列的位按位取反,除符号位不变。
补码:再将反码+1。
对于整数来说:补码形式就是整形储存在内存中的形式。
简而言之:对于整形来说:数据存放在内存中其实存放的是补码。
可以在VS编译器上证明以下:
在这里插入图片描述
对于在其中看到的是以16进制显示:10的16进制是a;

在这里插入图片描述
所以可以看到整形在内存中储存是以补码形式:
当然可以知道正数的原,反,补码都相同,怎么看的出来?
那我们以 负的整数来看一下:
在这里插入图片描述
在这里插入图片描述
由此可以看出整形在内存中存储的是其补码;

  • 但是还有一点是二进制在内存中存储的顺序,如果你对二进制比较熟悉可以看到上述中一补码:为
  • 在这里插入图片描述

但是这与内存中存储的方式却不一样:倒着存的,为什么
因为存储顺序是按照字节序:是以字节为单位,讨论存储顺序;

可以分为两种顺序:大端字节序存储小端字节序存储
大端字节序存储:是指数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中;
小端字节序存储:是指数据的高位保存在内存的高地址中,而数据的低位保存在内存的低地址中;
在这里插入图片描述
多加一点知识:
当然为什么要有大小端之分呢?

我们要知道,在计算机系统中,是以字节为单位,每个地址单元都对应这一个字节,一个字节有8个比特位,C语言中除了char类型是一个字节外,还有4个字节(32个比特位)的int类型,2个字节(16个比特位)的short类型,对于大于8位的处理器,因为大于1个字节,那么必然存在着如何将多个字节安排的问题,因此出现了大端,小端模式。

猜你喜欢

转载自blog.csdn.net/m0_66780695/article/details/130901227