数据的储存

2023-10-26

数据的存储在C语言中无疑是一个难点,但是也要充满信心征服他的信心,翻过这座山,会看到更广阔的天空。


基本数据类型

整型家族

浮点数家族

自定义类型

指针类型

空类型

大小端字节序介绍和判断

整形在内存中的存储

浮点型在内存中的存储

练习


基本数据类型

想要明白数据的存储首先要知道有哪些基本的数据类型。

基本数据类型有如下几种:

整型家族

整数家族包含int、sfotr、long还有char。

为什么会有char类型吗?它不是字符类型吗?

是因为字符在存储时就是ASCLL码值,所以在存储的时候被分为整型家族。

int、sfotr、long、char

又细分为有符号和无符号类型,一般情况下signed 可以省略不写。也就是 int 等价于 signed int

但是char 就比较特殊

char 不一定等于 unsigned char 也不一定等于signed char 这最终取决于编译器。

常见的编辑器上就是char == signed char

浮点数家族

浮点数类型的存储和整型的存储截然不同,参考浮点型在内存中的存储解析

float

double

自定义类型

数组类型

结构体类型 struct

枚举类型 enum

联合类型 union

指针类型

指针类型就是各种类型的指针

int* p;

char*p;

float* p;

void* p;

空类型

void 表示空类型

常用于 函数的返回类型、函数的参数、指针类型

大小端字节序介绍和判断

在开始数据类型的存储前首先需要明白什么是大小端!

大小端字节序说明白就是数据在电脑上存储的字节顺序。

我们能明白在计算机系统中,数据是以字节为单位的,每个地址单元都存放着一个字节。

而对于位数大于8 的处理器,例如16或32位的处理器,由于寄存器宽度大于一个字节,那么必然存在一个如何将多个字节安排的问题,因此就导致了大小端的存储模式

说人话就是 char 类型存储的时候(不考虑整型提升),放进去自然就不用考虑放置顺序,直接用就可以。但是int 类型不可以,一个int 类型就是4个字节也就是32比特位,放入后一个字节一个字节放置,需要考虑放置顺序,在众多存放顺序中最后就出现了两种存储模式:大端存储模式、小端存储模式。

大端储存(大端字节序存储)模式 :是指数据地位保存在内存的高地址中,而数据的高位,保存在内存的低地址中,

小段存储(小端字节序存储 )模式:是指数据的地位保存在内存的低地址中,而数据的高位,保存在内存的高地址中,

比如我需要存储一个int i = 20;

换算为16进制 i = 0x14;

大小端在内存中的储存方式如下图:

而且我们平时用的编辑器一般都是小端存储。

怎么让计算机判断是大端存储,还是小端存储?

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

void judgeEnds()
{
    int a = 1;           //a 的16进制位 0x00 00 00 01
    if ((char*)&a)       //通过取a的第一个字节来判断是不是大小端
    {
        printf("小端");
    }
    else
    {
        printf("大端");
    }
}

int main()
{
    
    judge();             //调用judgeEnds判断大小端

    return 0;
}

整形在内存中的存储

整型在内存中的存储方式就是补码

但是为什么是用补码呢?

1·使用补码,可以是符号位和数值域统一处理,防止0有两个编码。

2·让减法变成加法来处理(这是因为CPU只有加法器)。

3·补码于原码的相互转换条件是相同的,不需要额外的硬件电路。

正数的原码、反码、补码相同

int a = 10;
//00000000000000000000000001010 - 原码
//00000000000000000000000001010 - 反码
//00000000000000000000000001010 - 补码

负数的原码、反码、补码就有一定的差异了

int b = -10;
//10000000000000000000000001010 - 原码
//11111111111111111111111110101 - 反码    反码 = 除了符号位,其他位,按位取反
//11111111111111111111111110110 - 补码    补码 = 反码 + 1

现在我们计算一个10 - 10!

int a = 10;
int b = -10;
//如果用原码来计算的话 10 - 10 = 10 + (-10)
int c = a + b;
//00000000000000000000000001010 - a - 原码
//10000000000000000000000001010 - b - 原码
//10000000000000000000000010100 - c - 原码
//明显不对
//但是用补码就可以完美计算出10 + (-10) = 0
//00000000000000000000000001010 - a - 补码
//11111111111111111111111110110 - b - 补码 
//00000000000000000000000000000 - c - 补码

浮点型在内存中的存储

浮点数的存储规则是根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式:

(-1)* S * M * 2^E

(-1)* S  表示符号位。

M表示有效数字,大于等于1,小于2。

2^E表示指数位。

就拿5.5举例来说

5.5转换为2进制位就是 1 0 1 . 1

就可以写成 (-1)* 0 * 1.011 * 2 ^ 2

其中 M 、S 相当好理解,但是E就感觉有点疑惑

如果是0.75 写作(-1)* S * M * 2^E 就是 (-1)* 0 * 1.1 * 2 ^ -1

对!问题就是-1 因为内存中存储的是二进制位,所以怎么可能会出现负数呢?

这时候就需要对E进行补充说明了:

        E是一个无符号整数

E为8位就是 0~255 E为11位就是0~2047

但是科学计数法中的E可以出现负数。

所以存入内存时E的真实值必须再加上一个中间数 对于8位数时127 11位数是1023

        E不全为0,不全为1

遵循中间值的守则该怎么算就怎么算。

        E全为0

有效数字M不再加上第一位1,而是还原为0.xxxx的小数,这样做是为了表示+0,-0,以及很接近0的很小的数字。

        E全为1

有效数字M全为0,表示+-无穷大。

说完S、M、E 后就是float、double 类型的存储了

由上图可见,单精度双精度之间相差的可不是一点半点。

float S 1位 E 8位 M 23位

double S 1位 E 11位 M 52位

所以想要数字更准确,用double 类型还是好的。

练习

最后还有一个小练习:

int main()
{
    int n = 16;
    float *pFloat = (float *)&n;
    printf("n的值为:%d\n",n);
    printf("*pFloat的值为:%f\n",*pFloat);
    *pFloat = 16.0;
    printf("num的值为:%d\n",n);
    printf("*pFloat的值为:%f\n",*pFloat);
    return 0;
}

提示:可以根据E的取值来帮助判断。

最后的解答为:



相信你,翻过这座山会看到更广阔的天空!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据的储存 的相关文章

  • 软件测试|使用matplotlib绘制平行坐标系图

    简介 绘制平行坐标系图 Parallel Coordinates Plot 是一种用于可视化多维数据的强大方法 在这篇文章中 我们将介绍如何使用Matplotlib库创建平行坐标系图 以及如何解释和定制这种图表 我们将使用一个示例数据集来演
  • 软件测试|sqlalchemy relationship

    简介 SQLAlchemy是一个流行的Python ORM 对象关系映射 库 它允许我们以面向对象的方式管理数据库 在SQLAlchemy中 relationship 是一个重要的功能 用于建立表之间的关系 在本文中 我们将详细探讨 rel
  • 基于java的学生成绩管理系统设计与实现

    基于java的学生成绩管理系统设计与实现 I 引言 A 研究背景和动机 学生成绩管理系统是一个重要的教育工具 能够帮助学校管理学生的成绩和考试结果 以便更好地评估学生的教育水平和发展潜力 Java是一种广泛应用的编程语言 具有跨平台 高效
  • 电商数据api拼多多接口获取商品实时数据价格比价api代码演示案例

    拼多多商品详情接口 接口接入入口 它的主要功能是允许卖家从自己的系统中快速获取商品详细信息 通过这个接口 卖家可以提取到商品的各类数据 包括但不限于商品标题 价格 优惠价 收藏数 下单人数 月销售量等 此外 还可以获取到商品的SKU图 详情
  • 用CHAT分析高校体育智慧教学体系构建与探索研究现状

    CHAT回复 现阶段 高校体育智慧教学体系的构建与探索研究还处于初级阶段 但全球数字化转型大潮的推动下 一些较为前沿的研究和实践已经开始出现 1 教学平台的建设 很多高校已经开始尝试使用在线教育平台进行体育教学 把传统的面对面授课模式转变为
  • 软件测试|使用matplotlib绘制多种柱状图

    简介 在数据可视化领域 Matplotlib是一款强大的Python库 它可以用于创建多种类型的图表 包括柱状图 本文将介绍如何使用Matplotlib创建多种不同类型的柱状图 并提供示例代码 创建基本柱状图 首先 让我们创建一个基本的柱状
  • 【计算机毕业设计】电商个性化推荐系统

    伴随着我国社会的发展 人民生活质量日益提高 于是对电商个性化推荐进行规范而严格是十分有必要的 所以许许多多的信息管理系统应运而生 此时单靠人力应对这些事务就显得有些力不从心了 所以本论文将设计一套电商个性化推荐系统 帮助商家进行商品信息 在
  • 【计算机毕业设计】毕业生就业管理微信小程序_lm9q0

    腾讯公司在2017年1月19日发布了一款不需要下载 不需要卸载 不需要存储的软件叫微信小程序 受到了很多人的喜欢 微信小程序自2017年发布至今 依托微信的社交属性和庞大的用户基数 已经渗透到生活的方方面面 1 微信小程序可以将基于微信平台
  • 【计算机毕业设计】宝鸡文理学院学生成绩动态追踪系统

    研究开发宝鸡文理学院学生成绩动态追踪系统的目的是让使用者可以更方便的将人 设备和场景更立体的连接在一起 能让用户以更科幻的方式使用产品 体验高科技时代带给人们的方便 同时也能让用户体会到与以往常规产品不同的体验风格 与安卓 iOS相比较起来
  • 华为OD机试真题-分披萨-2023年OD统一考试(C卷)

    题目描述 吃货 和 馋嘴 两人到披萨店点了一份铁盘 圆形 披萨 并嘱咐店员将披萨按放射状切成大小相同的偶数扇形小块 但是粗心服务员将披萨切成了每块大小都完全不同奇数块 且肉眼能分辨出大小 由于两人都想吃到最多的披萨 他们商量了一个他们认为公
  • 计算机Java项目|基于SSM的微课学习系统

    作者主页 编程指南针 作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智
  • 15天学会Python深度学习,我是如何办到的?

    陆陆续续有同学向我们咨询 Python编程如何上手 深度学习怎么学习 如果有人能手把手 一对一帮帮我就好了 我们非常理解初学者的茫然和困惑 大量视频 书籍 广告干扰了大家的判断 学习Python和人工智能 成为内行人不难 为此 我们推出了
  • 用栈实现队列(OJ中报错的处理)

    用栈实现队列 ERROR AddressSanitizer myQueueFree函数中栈的释放处现了问题 没有调用StackDestory而是直接free了 这个是栈初始化时 capacity与malloc申请的空间大小没有匹配 请你仅使
  • 【心电图基线估计和去噪方法的群稀疏正则化】带有群稀疏正则化的心电图基线估计和去噪(Matlab实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章
  • 初学者如何快速入门Python(内附详细攻略),一文讲清

    目前python可以说是一门非常火爆的编程语言 应用范围也非常的广泛 工资也挺高 未来发展也极好 Python究竟应该怎么学呢 我自己最初也是从零基础开始学习Python的 给大家分享Python的学习思路和方法 一味的买书看书 看视频 是
  • 在 Python 中实现 List 抽象

    在 Python 中 创建一个包含多个对象的 list 很常见 例如 对于一组具有相同功能的对象 比如播放声音 希望能够使用类似 my list play 的语法来触发 list 中所有对象的 play 方法 另一个例子是 当希望关闭 li
  • 【安全】Java幂等性校验解决重复点击(6种实现方式)

    目录 一 简介 1 1 什么是幂等 1 2 为什么需要幂等性 1 3 接口超时 应该如何处理 1 4 幂等性对系统的影响 二 Restful API 接口的幂等性 三 实现方式 3 1 数据库层面 主键 唯一索引冲突 3 2 数据库层面 乐
  • 计算机Java项目|人体健康信息管理系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • Java进阶之旅第七天

    Java进阶之旅第七天 文章目录 Java进阶之旅第七天 方法引用 介绍 代码展示 结果 方法引用的分类
  • 计算机Java项目|java游戏账号交易系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板

随机推荐

  • 简明SQL截断和偏移指南:掌握LIMIT实现数据筛选

    以下是用到的表 截断 LIMIT 用于限制查询结果返回的行数 即最多返回多少行数据 例如 返回前两行数据 例如 从第二个数据开始返回两条数据 从0开始计算 偏移 OFFSET 用于指定查询结果的起始位置 即从结果集中的第几行开始返回数据 例
  • Spring使用——通过配置类注入Bean

    配置类 Configuration 告诉spring这是一个配置类 ComponentScan value指定要扫描的包 Filter excludeFilters default 扫描的时候按照规则排除哪些 ComponentScan v
  • App自动化测试 —— Appium的使用

    目录 简介 安装 配置 Run 问题 解决方案 优点 缺点 总结 简介 Appium是一个开源测试自动化框架 用于原生 混合和移动 Web 应用程序 安装 Appium安装方式有两种 一种是通过npm命令行安装 另一种是通过安装可视化工具
  • 华为OD机试真题 Java 实现【查找单入口空闲区域】【2022 Q4 100分】,附详细解题思路

    目录 一 题目描述 二 输入描述 三 输出描述 四 解题思路 五 Java算法源码 六 效果展示 1 输入 2 输出 3 说明 一 题目描述 给定一个 m x n 的矩阵 由若干字符 X 和 O 构成 X 表示该处已被占据 O 表示该处空闲
  • c3p0 mysql 自动重连_C3P0官方对于MySQL8小时问题的解决方案

    前一段时间在做一个发邮件的程序 程序是用定时器 每晚凌晨定时发邮件 邮件内容需要从数据库中获取 运行了一天就出问题了 问题信息如下 com mysql jdbc exceptions jdbc4 CommunicationsExceptio
  • 计算机系统基础课程实验课bomb--phase_1

    首先呢 栈顶减8个字节 然后将 0x402400放入第二个参数以调用
  • 如何打造一个高效的研发团队

    互联网公司的成功很大一部分归结为人才储备 如何打造有活力 持续创新的研发团队 相信很多管理者都比较关心 下面我们从业务支撑 技术架构 团队建设这几个方面做简单剖析 业务支撑 快速发展已经成为互联网公司的一种常态 那么在这么快的节奏下 如何快
  • python自动化赚钱-薅羊毛

    1 目 标 场 景 最近 有一个朋友告诉我 她在某平台上购买了一部手机 收到货之后发现商品质量挺好的 价格也不贵 临了随手给了个好评 商家最后还给她发一个 小红包 她把这个商品分享给了我 本篇文章的目的是利用Python 自动化完成商品购买
  • 好用的vscode vue3插件

    可能不全 但是是自己用的比较舒服的配置 包括高亮 class类名提示 引用跳转 模板快速创建 插件列表 1 别名路径跳转 2 Atom One Light Theme 3 Auto Rename Tag 4 Chinese Simplifi
  • 在R语言中使用stress.labels参数为可视化图像中的强调线添加标签信息

    在R语言中使用stress labels参数为可视化图像中的强调线添加标签信息 在数据可视化中 我们经常需要突出显示某些线条或数据点 以便更清楚地传达信息 在R语言中 我们可以使用stress labels参数来为图像中的强调线添加标签信息
  • 14.学习Camera之——camera基本知识

    一 Camera模组 大家都知道 手机背面的那个小小的孔 就叫摄像头 这个小孔幽幽的泛着光泽 深邃又迷人 如同 一个含苞待放的小萝莉一样 这个小萝莉还是个傲娇娘 像零之使魔的614一样惹人怜爱 而且在小萝莉身体 里面 不对 是在小孔的里面
  • 大数据组件-Kafka的javaAPI操作,Kafka StreamingAPI开发,

    1 KafkaJavaApi操作 1 添加maven依赖
  • python写客户端发送请求失败_零基础写python爬虫之HTTP异常处理

    先来说一说HTTP的异常处理问题 当urlopen不能够处理一个response时 产生urlError 不过通常的Python APIs异常如ValueError TypeError等也会同时产生 HTTPError是urlError的子
  • iOS单例

    iOS开发中单例模式必不可少 是不是还在写单例的时候还写那一坨代码呢 这里提供一个宏 只需要简单的两句话就可以实现单例无论MRC还是ARC 使用方法 h中 import
  • @Control详解--Spring2.5

    一个简单的基于注解的 Controller 使用过低版本 Spring MVC 的读者都知道 当创建一个 Controller 时 我们需要直接或间接地实现 org springframework web servlet mvc Contr
  • LintCode统计数字:计算数字k在0到n中的出现的次数,k可能是0~9的一个值

    现在是2018 9 21 距离毕业还有不到两年的时间 情况乐观的话 我应该会在一年之内去找一份实习工作 对于找工作这件事 此刻的我还是有些惶恐 我无法确定清晰的职业方向和目标 对自己的知识储备也不自信 为了给即将面对的求职做些准备 我觉得有
  • CSDN证书记录(仅仅只是个人CSDN纪录)

    按照时间线来记录点点滴滴 1 2022年4月 安卓领域实力新星 2 2022年7月 笔耕不辍 3 2022年8月 博客专家
  • 今天百度索引量算是闹了个乌龙吗

    今天百度索引量算是闹了个乌龙吗 各大网站 不论大小 基本上都是索引量砍半 百度站长论坛更是热闹非凡 各种声音都有 百度服务器故障 百度算法大调整 网站被降权了等等 作为老站长的我发现索引量大幅下降后 立马看了百度站长平台中的其他站点 发现都
  • Xilinx FPGA 7系列 GTX/GTH Transceivers (1)

    初识Xlilix GTX 1概述 Xilinx 7系列FPGA全系所支持的GT GT资源是Xilinx系列FPGA的重要卖点 也是做高速接口的基础 GT的意思是Gigabyte Transceiver G比特收发器 不管是PCIE SATA
  • 数据的储存

    数据的存储在C语言中无疑是一个难点 但是也要充满信心征服他的信心 翻过这座山 会看到更广阔的天空 基本数据类型 整型家族 浮点数家族 自定义类型 指针类型 空类型 大小端字节序介绍和判断 整形在内存中的存储 浮点型在内存中的存储 练习 基本