C语言 深度剖析数据在内存中的存储

news2024/11/19 1:40:32

目录

  1. 数据类型详细介绍

  1. 整形在内存中的存储:原码,反码,补码

  1. 大小端字节序介绍及判断

  1. 浮点型在内存中的存储解析

  1. 数据类型详细介绍

整形:

1.为什么char类型也会归类到整形家族当中去呢?
字符存储和表示的时候本质上使用的是ASCII值,ASCII值是整数,字符也归类到整形。
2.为什么会存在无符号数和有符号数呢?
因为现实生活中描述一些变量时,存在一些数有正负,而一些数只有正数没有负数,例如年龄 温度
3.我们在使用int类型时,int就相当于signed int,只不过signed可以省略掉
而无符号整数只能写为 unsigned int
4.注意 char是否等价于singed char 取决于编译器,而大部分编译器char 都等价于singed char

构造类型:(自定义类型)

数组类型

结构体类型struct

枚举类型 enum

联合类型union

指针类型

int* pa;

char* pb;

float* pc;

void* pd;

空类型:

void表示空类型(无类型)

通常应用于函数的返回类型,函数的参数,指针的类型

void test()//函数不需要返回值
{

}
void test(void)//函数不需要参数
{

}
void* p;//无具体类型的指针

2.整形在内存中的存储:原码,反码,补码

变量的创建是要在内存中开辟空间的,空间大小是根据不同的类型来决定的。

1.计算机中整数有3种二进制表示方法,即原码、反码、补码

2.三种表示方法均有符号位数值位两部分,0表示正,1表示负

3.正数的原码、反码、补码都相同

负数原码:直接翻译成二进制就可以得到原码

负数反码:除符号位每一位按位取反得到反码

负数补码:反码基础上加1得到补码

4.整形在内存中是以补码的形式存储

int main()
{
    int a = 20;
    //00000000000000000000000000010100  原码 反码 补码
    int b = -10;
    //10000000000000000000000000001010  原码
    //11111111111111111111111111110101  反码
    //11111111111111111111111111110110  补码
    return 0;
}
为什么在计算机系统中数值一律用补码的形式进行存储呢?
原因是:使用补码,可以将符号位和数值域统一处理;同时加减法也可以统一处理, CPU只有加法器
此外,原码和补码进行转换,其运算过程是相同的,不需要额外的硬件电路。
//1-1
//1+(-1)
//00000000000000000000000000000001
//10000000000000000000000000000001
//11111111111111111111111111111110
//100000000000000000000000000000000 1和-1的补码相加
//00000000000000000000000000000000 舍弃最高位

3.大小端字节序介绍及判断

为什么会出现这种倒放的现象呢?

因为任何数据在存储的过程中,如果它的大小大于1个字节,那么它在存储过程中就会存在一个存储顺序的问题。

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

例如存储123:从3的开始依次向高位1存储

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

上图为地址从低到高

知道了大小端字节序,那么我们就可以解决开头的地址倒放现象

所以开始的倒放现象是小端字节序存储的。


设计一个程序,判断数据是大端存储还是小端存储。

思路:假设我们要存储的是整形1,那么在内存中可能就会出现以下两种情况。

int main()
{
    int a = 1;//0x00000001
    char* p = (char*)&a;//访问1个字节
    if (*p == 1)
    {
        printf("此数据为小端字节序存储\n");
    }
    else if (*p == 0)
    {
        printf("此数据为大端字节序存储\n");
    }
    return 0;
}

封装为函数:

int check_sys()
{
    int a = 1;//0x00000001
    char* p = (char*)&a;//访问1个字节
    if (*p == 1)
        return 1;//小端
    else
        return 0;//大端
}
int main()
{
    if (check_sys() == 1)
    {
        printf("小端\n");
    }
    else
    {
        printf("大端\n");
    }
    return 0;
}

有符号char和无符号char的范围

所以推广我们可以得到:

short -2^15~2^15-1

unsigned short 0~ 2^16-1

%d打印有符号数
%u打印无符号数

以上程序为什么会出现这样的结果?

就是因为格式符使用错误导致的,所以在打印有符号和无符号数时,一定要注意格式控制符的使用

感谢阅读,继续剖析请看下回分解。

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

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

相关文章

【华为OD机试模拟题】用 C++ 实现 - 最大相连男生数(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 货币单位换算(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 选座位(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 停车场最大距离(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 重组字符串(2023.Q1) 【华为OD机试模…

integrationobjects/OPC AE Client ActiveX Crack

使用 OPC AE 客户端 ActiveX 进行快速 OPC 警报和事件客户端编程! OPC AE Client ActiveX包括多个 OPC ActiveX 控件,可以轻松嵌入到最流行的 OLE 容器中。这允许用户与任何 OPC AE 服务器连接并实时检索警报和事件。 这种易于使用的 OPC AE ActiveX 简化…

论文笔记|固定效应的解释和使用

DeHaan E. Using and interpreting fixed effects models[J]. Available at SSRN 3699777, 2021. 虽然固定效应在金融经济学研究中无处不在,但许多研究人员对作用的了解有限。这篇论文解释了固定效应如何消除遗漏变量偏差并影响标准误差,并讨论了使用固…

【C语言进阶】文件的顺序读写、随机读写、文本文件和二进制文件、文件读取结束的判定以及文件缓冲区相关知识

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:C语言进阶 🎯长路漫漫浩浩,万事皆有期待 文章目录1.文件操作1.1 概述…

优思学院:《改变世界的机器・精益生产之道》是什么著作?

《改变世界的机器》(The Machine That Changed the World)是一本经典的商业管理书籍,由詹姆斯P温斯顿(James P. Womack)、丹尼尔T琼斯(Daniel T. Jones)和丹尼尔罗斯(Daniel Roos&am…

带组态物联网平台源码 代码开源可二次开发 web MQTT Modbus

物联网IOT平台开发辅助文档 技术栈:JAVA [ springmvc / spring / mybatis ] 、Mysql 、Html 、 Jquery 、css 使用协议和优势: TCP/IP、HTTP、MQTT 通讯协议 1.1系统简介 IOT通用物联网系统平台带组态,是一套面向通用型业务数据处理的系统…

Spring MVC 源码- HandlerAdapter 组件(五)之 HttpMessageConverter

HandlerAdapter 组件HandlerAdapter 组件,处理器的适配器。因为处理器 handler 的类型是 Object 类型,需要有一个调用者来实现 handler 是怎么被执行。Spring 中的处理器的实现多变,比如用户的处理器可以实现 Controller 接口或者 HttpReques…

数据结构预算法之买卖股票的最好时机(三)动态规划

目录:一.题目知识点:动态规划二.动态规划数组思路确定1.dp数组以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组一.题目知识点:动态规划动态规划算法的基本思想是:将待求解的问题分解成若干个相互联…

惠普m1136打印机驱动程序安装教程

惠普m113打印机是一款功能强大的多功能打印机,它能够打印、复印、扫描和传真等。如果你要使用这款打印机,你需要下载并安装驱动程序,以确保它能够在你的计算机上正常工作。在本文中,我们将介绍如何下载和安装惠普m1136打印机驱动程…

Python实现贝叶斯优化器(Bayes_opt)优化支持向量机回归模型(SVR算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。1.项目背景贝叶斯优化器 (BayesianOptimization) 是一种黑盒子优化器,用来寻找最优参数。贝叶斯优化器是…

【华为OD机试模拟题】用 C++ 实现 - 跳格子(2023.Q1)

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

sklearn学习-朴素贝叶斯(二)

文章目录一、概率类模型的评估指标1、布里尔分数Brier Score对数似然函数Log Loss二、calibration_curve:校准可靠性曲线三、多项式朴素贝叶斯以及其变化四、伯努利朴素贝叶斯五、改进多项式朴素贝叶斯:补集朴素贝叶斯ComplementNB六、文本分类案例TF-ID…

excel核对技巧:这么多数据对比的方法应该够用了

日常工作不时会需要对比数据,查找差异,查找重复值等。有的是对比同一工作表中的数据,有的是对比不同工作表之间的数据。希望接下来介绍的多种Excel数据对比方法,让大家能在不同情况下都能快速完成数据的对比。第一部分&#xff1a…

pytorch入门1--数据操作(张量)

一、张量的定义和变换 1.张量表示一个数值组成的数组,这个数组可能有多个维度。 说明,torch.arange(12)可以得到一个一维的(有几层中括号就是几维数组,注意是层,不是个数),一个最内层的一个中括…

Qt图片定时滚动播放器

目录参考结构PicturePlay.promain.cpppictureplay.hpictureplay.cpppictureplay.ui效果参考 Qt图片浏览器 QT制作一个图片播放器 Qt中自适应的labelpixmap充满窗口后,无法缩小只能放大 可以显示jpg、jpeg、png、bmp。可以从电脑上拖动图到窗口并显示出来或者打开文件…

371. 两整数之和

题目: 给你两个整数 a 和 b ,不使用 运算符 和 - ,计算并返回两整数之和。 示例 1: 输入:a 1, b 2 输出:3 示例 2: 输入:a 2, b 3 输出:5 提示: -…

虚拟机VMware Workstation Pro环境搭建

VMware Workstation Pro是一款虚拟化工具,允许用户在Windows PC上运行多个操作系统。这个平台提供一个安全和独立的环境,让用户在使用前,可以建立和测试应用程序、检查修补程序,以及尝试不同的操作系统。它附有虚拟机库 它允许用户…

【大数据】大数据Hadoop生态圈

文章目录大数据Hadoop生态圈-组件介绍1、HDFS(分布式文件系统)2、MapReduce(分布式计算框架)3、Spark(分布式计算框架)4、Flink(分布式计算框架)5、Yarn/Mesos(分布式资源…

LeetCode 热题 C++ 148. 排序链表 152. 乘积最大子数组 160. 相交链表

力扣148 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4]示例 2: 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5]示例 3&#x…

php mysql校园帮忙领取快递平台

1、后台管理员用户名hsg 密码hsg 2、开发语言:PHP,数据库为MySql 3、数据库连接字符串在conn.php中修改 4、运行环境wamp5.1.7或者appserv2.5.9 5.程序编码gbk.不支持php5.3以上版本 6.本人发布的程序一律享有免费运行一次…