深入理解C语言(1):数据在内存中的存储

news2024/11/25 22:53:51

标头
风景图片


  • 文章主题:数据在内存中的存储🌏
  • 所属专栏:深入理解C语言📔
  • 作者简介:更新有关深入理解C语言知识的博主一枚,记录分享自己对C语言的深入解读。😆
  • 个人主页:[₽]的个人主页🏄🌊

目录

  • 数据类型介绍
    • 整型
      • char(字符型)
      • short(短整型)
      • int(整型)
      • long(长整型)
    • 浮点型
    • 构造类型(自定义类型)
    • 指针类型
    • 空类型
  • 类型简析
    • 整型
      • 关键字
      • 表示方法
      • 存储
    • 浮点型
      • 关键字
      • 表示方法
        • 存储公式
        • S(符号位):
        • M(有效数字):
        • E(指数):
      • 存储
    • 构造类型
    • 指针类型
    • 空类型
  • 字节序(数据在内存中存储的顺序)
    • 高低字节位
    • 大小端
    • 字节序
  • 结语


数据类型介绍

整型

char(字符型)

char
unsigned char
signed char

short(短整型)

short [int]
unsigned short [int]
signed short [int]

int(整型)

int
unsigned int
signed int

long(长整型)

long
unsigned long [int]
signed long [int]


浮点型

float
double
long double


构造类型(自定义类型)

数组类型:
结构体类型:struct
枚举类型:enum
联合类型 union


指针类型

int*
char*
float*
void*
······


空类型

void


类型简析

整型

关键字

整型分为无符号整型和有符号整型两种,分别用关键字signedunsigned来表示,其中除了 char类型在C语言中没有明确表示用char来作为signed char的省略,而是取决于编译器之外,其余整型在不加signed时,均会默认成signed类型。

表示方法

整型二进制表示方法:原码、反码、补码;
转换方法:原码符号位不变取反 -> 反码,反码 + 1 -> 补码,补码 + 1 -> 原码;
特性:正整数原码、反码、补码相同;负整数原码、反码、补码需遵循转换方法计算得出。

存储

整数在内存中是补码形式的二进制序列


浮点型

关键字

浮点型没有无符号的类型,所以只要是浮点型就会自带符号,也就没有有无符号只类的概念一说。因为其在内存中的贮存方式和整型的原、反、补码的方式完全不同,因此专门为了整型数据设计出来的关键字signed以及unsigned对于浮点型来说并不适用。

表示方法

存储公式

根据IEEE(电气与电子工程师协会)的规定,浮点的存储公式为如下,其中内存中只储存S、M、E三个的数据。
( − 1 ) S ∗ M ∗ 2 E (-1)^{S}*M*2^{E} (1)SM2E

S(符号位):

因为只需通过0或1就可以来表示一个数据的正负,在所有浮点类型中都只占一个bit位。

M(有效数字):

在IEEE规定的标准中,M的存储类型为无符号整型(符号已经由符号位确定了),float型在内存中占23bit位,double型在内存中占52bit位,另外因为浮点的存储采用的是科学计数法,科学计数法浮点以前的数因为是有效位,所以在二进制中将浮点符号位丢弃之后单看这个无符号的整型,有效位只会是1,所以IEEE中还规定了去掉科学计数法中前面固定的1.而只取后半部分存入M中,这样的话储存空间等于是由原来的可保存23/52位有效数字变成了现在的可以保存24/53位有效数字了,等于是数据的存储量将比原储存空间又扩大了一位。

E(指数):

因为也是无符号整型,float型中占8bit位,double型中占11bit位,但是E完全有可能出现负数的情况,所以IEEE中又规定,对于8位的E加上中间数127,11位的E加上中间数1023,这样就可以实现负指数的效果,可能是因为一段内存中有多个符号位不好处理,实际上这样存储的指数范围和有符号存储的指数范围完全相同。

存储

float型和double型存储方式如图:


float内存存储


double内存存储


由此,我们也可以很清楚的看出来为什么float被称为单精度浮点型而double被称为双精度浮点型了,通过duoble通过增加内存长度为float的双倍,指数E和有效位数的长度也得到了提升(因为小数点之后的位数是由有效位以及指数共同决定的),从而成为了精度更高的双精度。


构造类型

数组类型:
元素类型 数组名[元素个数](初始化后元素个数可以不加)

结构体类型:
struct 结构体名(struct和结构体名共同构成了该结构体类型的类型名)
{
结构体成员类型 + 结构体成员名;
······
}

枚举类型:专门文章讲解

联合类型:专门文章讲解


指针类型

类型名*就是该类型的类型名,其中*起标记变量名为指针的作用,因此一次只会作用在一个变量上(一颗*只能标记一个变量,该变量之后接着定义的变量都会为该变量解引用之后得到的变量类型,也就是*前面的类型)


空类型

无类型,就是在一些在一些可以无需加具体类型定义的情况下使用的类型,如函数无参数就是无类型,函数无返回值也是无类型。其也有对应的指针类型——空指针(void*),作用主要是用来标记暂时没有赋有意义地址的指针,并防止其成为野指针。


字节序(数据在内存中存储的顺序)

高低字节位

一个数的高位与低位和这个数在内存中的高字节位与低字节位位置相同,只是转换成二进制码后将其高位上的前八位的数字,也就是在VS中看到的前两个16进制数字称作一个高字节位,低字节位的定义也是同理。

大小端

我们将高字节位的一端称作该二进制码的大端,低字节一端为小端,就有了大小端的定义,因此大小端的定义也只适用于单个数值的数据存储,而不适用于数组等结构类型的存储规律,这些类型较单个数字较为高级一些,都是由高级语言C语言本身的语法和其底层运行逻辑来决定的。

字节序

表示单个数值二进制码的存储顺序,内存中地址位是由低至高的,栈区中是有上堆积数据一直往上堆的,先堆积的是大端就是大端字节序,先堆积的是小端就是小端字节序。
字节序

结语

以上就是对数据在内存中的存储的深度解析,😄希望对你的C语言学习有所帮助!作为刚学编程的小白,可能在一些设计逻辑方面有些不足,欢迎评论区进行指正!看都看到这了,点个小小的赞或者关注一下吧(当然三连也可以~),你的支持就是博主更新最大的动力!让我们一起成长,共同进步!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1042887.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【红队攻防】从零开始的木马免杀到上线

0、环境配置说明 应该全部使用云服务器完整演示比较好,奈何太穷了买不起服务器,只能用本地环境演示。所需环境如下: 系统环境: CentOS 7 ,Windows 10 软件环境 Cobalt Strike 4.7 , ShellQMaker, 360杀…

医院电子病历编辑器,EMRE(EMR Editor)源码

电子病历主要面向医院机构医生、护士,提供对住院病人的电子病历书写、保存、修改、打印等功能。本系统基于云端SaaS服务方式,通过浏览器方式访问和使用系统功能,提供电子病历在线制作、管理和使用的一体化电子病历解决方案,为医疗…

C语言 Cortex-A7核 IIC实验

iic.h #ifndef __IIC_H__ #define __IIC_H__ #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h" /* 通过程序模拟实现I2C总线的时序和协议* GPIOF ---> AHB4* I2C1_SCL ---> PF14* I2C1_SDA ---> PF15** */#define SET_SDA_OUT do{…

JS的基本组成

JavaScript的实现包括以下3个部分: 模块功能ECMAScript(核心)描述了JS的语法和基本对象。文档对象模型 (DOM)处理网页内容的方法和接口浏览器对象模型(BOM)与浏览器交互的方法和接口 javascript 有三部分构成&#…

Observability:软件开发和运营中有效日志管理的力量

作者:Luca Wintergerst, David Hope, Bahubali Shetti 当今的快速软件开发过程需要不断扩展且复杂的基础设施和应用程序组件,并且运营和开发团队的工作不断增长且涉及多个方面。 可观察性有助于管理和分析遥测数据,是确保应用程序和基础设施性…

医疗小程序:智能化时代的就医新选择

如今,随着科技的不断进步,人们对于健康的关注度也越来越高。为了满足广大用户的需求,医院与乔拓云平台携手合作,推出了一款医疗小程序,旨在为用户提供更加便捷的健康服务链。 为了让每位用户都能享受到便捷的服务&…

selenium自动化测试+OCR-获取图片页面小说

随着爬虫技术的发展,反爬虫技术也越来越高。 目前有些网站通过自定义字体库的方式实现反爬,主要表现在页面数据显示正常,但是页面获取到的实际数据是别的字符或者是一个编码。 这种反爬需要解析网站自己的字体库,对加密字符使用字…

图片编辑小程序源码/拼图小程序源码

图片编辑小程序源码,拼图小程序源码。全能、便捷的图片编辑工具。实现了图片裁剪、添加文字、涂鸦、拼长图、拼相框等图片编辑功能,另外还有一个简易的表情包制作功能。 主要有以下几个功能:图片裁剪、添加文字、涂鸦功能、拼长图、拼相框、表…

TCPIP状态转换

一个TCP连接在其生命周期中经过了一系列的状态跃迁。一个TCP连接的状态包括: LISTEN :表示正在等待来自任何远程TCP和端口的连接请求,调用listen后套接字出于监听状态SYN_SENT : 表示在发送了连接请求后,正在等待匹配的连接请求…

代码随想录Day03 | 链表基础1 LeetCode T203 移除链表元素 T707设计链表 T206 反转链表

本题思路和解答主要来源于: 代码随想录 (programmercarl.com) LeetCode T203 移除链表元素 题目链接:203. 移除链表元素 - 力扣(LeetCode) 首先我们回顾一下单向链表,每个链表有一个指针域和一个数据域,在内存中是呈现不连续排列的,对比之前的数组,链…

一百八十八、Hive——HiveSQL查询表中的日期是星期几(亲测,附截图)

一、目的 指标需要查询以工作日和周末维度的数据统计,因此需要根据数据的日期判断这一天属于星期几,周一到周五为工作日,周六到周日为周末 二、SQL查询 (一)SQL语句 selectday,case when pmod(datediff(create_tim…

【CentOS7】基于python2,3安装docker-compose

【CentOS7】基于python2,3安装docker-compose 前言【基于python2.7】1.安装pip服务2.安装docker-compose服务 【基于python3】1.安排python32.检查是否安装成功3.安排python-pip3并升级4.执行如下命令安装 docker-compose:5.查看docker-compose 版本 前言…

【IDEA】IDEA 单行注释开头添加空格

操作 打开 IDEA 的 Settings 对话框(快捷键为CtrlAltS);在左侧面板中选择Editor -> Code Style -> Java;在右侧面板中选择Code Generation选项卡;将Line comment at first column选项设置为false使注释加在行开…

Hazelcast系列(三):hazelcast管理中心

系列文章 Hazelcast系列(一):初识hazelcast Hazelcast系列(二):hazelcast集成 Hazelcast系列(三):hazelcast管理中心 目录 前言 平台搭建 测试 其他 参考 总结 前言 前面,我们通过几种配置方式(Hazelcast系…

解决jetbrains-toolbox缺失修改安装路径默认安装C盘问题

前一阵子使用 ToolBox 的时候还可以修改 IDEA 的安装路径,但是过了一段时间在家里电脑发现无法没有了修改安装路径这一选项,庞大的 IDEA 软件累积起来C盘的空间也日趋臃肿,有强迫症的程序员怎么会让它安装在C盘呢? 如图所示&…

1024程序员节之天马低代码开发者大赛篇

卡奥斯第二届1024程序员节正在火热进行中!本次活动由四个线上活动分会场线下会场组成,今天向大家详细介绍一下四大线上分会场中的“低代码分会场”~ 天马低代码开发者大赛于2023年9月22日至10月20日12: 00进行,活动设立能源和组态两个赛道&a…

《安富莱嵌入式周报》第323期:NASA开源二代星球探索小车, Matlab2023b,蓝牙照明标准NLC, Xilinx发布电机套件,Clang V17发布

周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版: https://www.bilibili.com/video/BV1vp4y1F7qD 《安富莱嵌入式周报》第323期:NASA开源…

Docker-基本了解

Docker-基本了解 一、基本概念1、镜像2、容器 二、执行流程三、体系结构 一、基本概念 Docker是容器化平台,提供应用打包,部署与运行应用的容器化平台,应用程序通过docker engine(Docker 引擎获取可用资源)&#xff0…

磁铁产品上架亚马逊做什么认证?磁铁产品16CFR1262认证标准

玩具产品就需要做CPC认证:CPSIAASTMF9634.38磁铁标准(玩具安全标准消费者安全规范。) 法规要求 必须根据ASTM F963-17第8.25.1节至第8.25.3节中概述的程序对所有磁体产品进行测试。 《消费品安全法》(CPSA)第14&…

【安卓】开发跳过广告app,具备“李跳跳”app的部分功能

前言 现在手机的开屏广告还是挺多的,还有应用内弹出广告,青少年模式等,市面上很多跳过广告app下架了,我利用工作闲暇时间开发了自己用的app,不传播,分享知识! 实现思路 利用手机的无障碍服务…