数据在内存中的存储

一、数据类型介绍

c语言中的基本的数据类型主要有这么几种

(1)char   字符数据类型

(2)short   短整型

(3)int       整型

(4)long    长整型

(5)long long 更长的整型

(6)float      单精度浮点数

(7)double  双精度浮点数

如果整型还要进行细分的话,又可以分为有符号(signed)整型和无符号(unsigned)整型。如果是有符号整型,那最高位是符号位,如果是无符号整型,那全部位都是有效位,举个例子吧:

signed char: 10001111   表示-15

unsigned char:10001111 表示143

首先我们先来看一下整型家族里面有哪些成员

(1)char    unsigned char                 signed char

(因为字符在存储的时候,存储的是ASCII码值,ASCII码值是整型数据,所以char归类的时候放在整型家族)

(2)short     unsigned short  [int]       signed short [int]

(3)int          unsigned int                  signed int

(4)long        unsigned long  [int]      signed long [int]

(5)long long   unsigned long long [int]       signed long long [int]

二、原码,反码和补码的转换

整型数据的二进制表示形式有3种:原码,反码和补码,在内存中整型数据是以补码的形式存储的。它们的转换方法如下图所示:

举个例子来说吧,我们都知道整型在内存中占4个字节,一个字节有8个二进制位,那一个数用二进制表示出来共有32位,因为正数的原码,反码和补码都一样,所以我们拿一个负数来举个例子:

 比如这个数是-10,那么它用二进制来表示就是10000000 00000000 00000000 00001010,这里最高位是符号位,0表示正,1表示负。

原码:10000000 00000000 00000000 00001010

反码:11111111   11111111    11111111   11110101

补码:11111111   11111111    11111111   11110110

如果是补码转原码,首先末位减一,然后除符号位其余按位取反。

三、大端字节序存储和小端字节序存储

如果宝子们想看看数据在内存中到底是怎么存放的,可以这么操作:

首先,第一步,打开VS,我们先定义一个整型变量a,然后给它一个值,这里我们为了方便观察,可以给它赋一个16进制的值。为啥呢,虽然这些数本质上在内存中存放的是二进制,但是在VS上为了方便展示,显示的是16进制。

然后,按F10开始调试,接着在调试 > 窗口 > 内存 >,随便点一个内存都可以

然后我们就可以看到这个界面了

但是这里我们看到a的值在内存里是倒着存放的,为啥呢,因为这里的存储方式是小端存储,大端存储和小端存储的区别如下图所示:

这里给宝子们解释一下:

1.字节序:是以字节为单位,讨论存储顺序的

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

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

如果有老铁搞不清什么是低位字节或者高位字节的内容的话,可以拿十进制的数来理解,比如123,3是个位,2是十位,1是百位,那么1就是高位,3就是低位。我们上面给出的16进制的数也一样,0x11223344,11就是高位,44就是低位。这么解释应该可以理解吧。

那我们了解了大端和小端后,我们就知道为啥在这里数据是倒着放的了。

3.写一个程序来判断是大端存储还是小端存储

首先我们需要先定义一个整型变量a,然后把给a赋值1。

&a就可以拿到a的地址,为了方面观察,我们将它强制类型转换为char*,为啥要强制类型转换,因为整型一次性可以访问4个字节,而char一次性只可以访问一个字节,我们只需要看第一个字节即可。如下图所示:

代码如下:

相关推荐

  1. 数据内存存储

    2024-04-12 04:20:02       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-12 04:20:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-12 04:20:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-12 04:20:02       82 阅读
  4. Python语言-面向对象

    2024-04-12 04:20:02       91 阅读

热门阅读

  1. jQuery学习笔记(3.0)

    2024-04-12 04:20:02       35 阅读
  2. sql注入笔记整理

    2024-04-12 04:20:02       39 阅读
  3. 无过错方请求离婚损害赔偿的权利

    2024-04-12 04:20:02       40 阅读
  4. redis缓存雪崩,缓存穿透

    2024-04-12 04:20:02       42 阅读
  5. UVA230 Borrowers 图书管理系统 解题报告

    2024-04-12 04:20:02       39 阅读
  6. Python:闭包

    2024-04-12 04:20:02       45 阅读
  7. Web蓝桥杯刷题记录——燃烧你的卡路里

    2024-04-12 04:20:02       39 阅读
  8. oracle全量、增量备份

    2024-04-12 04:20:02       39 阅读
  9. 【Python】Python中大文件切割的艺术

    2024-04-12 04:20:02       41 阅读
  10. leetcode解题思路分析(一百五十五)1352 - 1358 题

    2024-04-12 04:20:02       37 阅读