数据在内存中的存储<C语言>

导言

        在计算机中不同类型的数据在计算机内部存储形式各不相同,弄懂各种数据在计算机内部存储形式是有必要的,C语言的学习不能浮于表面,更要锻炼我们的“内功”,将来在写程序的时候遇见各种稀奇古怪的bug时,也便能迎刃而解,所以本文将着重介绍,整数在内存中的存储、大小端字节序和判断、浮点数的存储。


整数在内存中的存储

       这部分的内容在前面已经讲过,现在让我们来复习一下:

一个数的二进制表示方法有三种:原码、反码、补码

        原码:直接将数转为2进制序列,得到的就是原码

        反码:符号位不变,将其它位取反

        补码:在反码基础上+1

在C语言中整数可分为有符号整数和无符号整数

        有符号整数:有符号位(第一位),0为正、1为负

        有符号整数:没有符号位,即全为正数。

在计算机内部存放的是补码,为啥是补码?

        因为CPU只有加法器,在计算机内部,正数的补码是本身,负数补码符号位不变,其他位取反,存放补码可实现加减法的统一运算(不需要添加减法器):

//在计算机内部存放的是补码,为啥是补码?
int main() {
	int a = 9;
	//a的补码:00000000 00000000 00000000 00001001
	int b = 4;
	//b的补码:00000000 00000000 00000000 00000100
	int c = a - b;
	//c=a-b会被转化为c=a+(-b)
	// a的补码:00000000 00000000 00000000 00001001
	//-b的补码:11111111 11111111 11111111 11111100
	// c的补码 100000000 00000000 00000000 00000101
	//相加结果多出一位,int型只有4字节、32位,高位抛弃
	// c的补码: 00000000 00000000 00000000 00000101
	//正数原反补相同,10进制数为5
	printf("%d", c);
	return 0;
}

运行结果:


 大小端字节序和判断

        超过一个字节的数据在存储时就会有存储顺序的问题:

         通过调试观察一个整型在内存中的存储可知:a的低位存储在低地址处,当前平台属于小端存储模式。

大端存储模式:

        是指数据的低位字节存储在内存空间的高位地址处。(大对大)

小端存储模式:

        是指数据的低位字节存储在内存空间的低位地址处。(小对小)

为了更好的理解下面给出几道练习:

        练习1(百度笔试10分)

简述大端字节序和小端字节序的概念,设计一个程序来判断当前机器的字节序。

        

         练习2

以下代码输出结果是啥?

#include <stdio.h>
//X86环境 ⼩端字节序 
int main()
{
	int a[4] = { 1, 2, 3, 4 };
	int* ptr1 = (int*)(&a + 1);
	int* ptr2 = (int*)((int)a + 1);
	printf("%x,%x", ptr1[-1], *ptr2);
	return 0;
}

运行结果:

 分析一下:

#include <stdio.h>
//X86环境 ⼩端字节序 
int main()
{
	int a[4] = { 1, 2, 3, 4 };
	int* ptr1 = (int*)(&a + 1);
    //&a取出整个整个数组的地址(访问权限为4*sizeof(int)个字节),再加1到元素4的后面
	int* ptr2 = (int*)((int)a + 1);
    //(int)a:将地址转为int类型的数,并加1,就是加了一个字节
    //因为当前平台为小端字节序,加1跳过了01,并从第二个字节开始00 00 00 02
	printf("%x,%x", ptr1[-1], *ptr2);
    //ptr[-1],访问权限为int型,倒退4字节,来到4的起始地址并打印
    //*ptr2:00 00 00 02,因为平台为小端字节序,所以该数为2000000
	return 0;
}

浮点数的存储

        浮点数的存储是比较特殊的,因为它具有小数位,如果采用整数存储方法肯定是不行的,于是IEEE(国际电气和电子工程协会)754规定,任意一个浮点数V可以表示为下面这种形式:

●-1的S次方:符号位,S为1时负数,S为0时正数

●M:有效数字,M大于1小于2

●E:指数位

如10进制数5.5转为二进制数101.1

那么S=1

        M=1.011

        E=2

浮点数在存储时就是存储的SME,值得注意的是,常见浮点数float和double型的字节长度是不一样的,那么在存储时,SME的内存分配会有所不同:

 

注意点:

●前⾯说过, 1≤M,也就是说,M可以写成 1.xxxxxx 的形式,其中 xxxxxx 表⽰⼩数部分。 因此1.可以舍去

●指数E,E为一个无符号整数,为了能存负数,754规定:存入内存时E的真实值必须再加上一个中间数,float:127,double:1023

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis之持久化、集群

1. Redis持久化 Redis为什么需要持久化?因为Redis的数据我们都知道是存放在内存中的&#xff0c;那么每次关闭或者机器断电&#xff0c;我们的数据旧丢失了。 因此&#xff0c;Redis如果想要被别人使用&#xff0c;这个问题就需要解决&#xff0c;怎么解决呢?就是说我们的数…

深度解析:从概念到变革——Transformer大模型的前世今生以及大模型预备知识讲解[知存科技]

深度解析&#xff1a;从概念到变革——Transformer大模型的前世今生 点击&#xff1a;知存科技相关课程推荐 知存科技是全球领先的存内计算芯片企业。针对AI应用场景&#xff0c;在全球率先商业化量产基于存内计算技术的神经网络芯片。凭借颠覆性的技术创新&#xff0c;知存科…

小米投屏怎么投?收好这3个投屏指南!(2024新)

近年来&#xff0c;小米凭借过硬的品质和合理的价格成为手机市场的一股强劲力量。随着其销量的上升&#xff0c;人们可以通过多种方式使用它来获得乐趣和便利。比如小米MIUI 11自带一个“光环”——Miracast&#xff0c;可以让用户在电脑上控制小米/红米/小米&#xff0c;获得更…

conda创建虚拟环境并激活

1 conda activate base 2 conda creat -n aaa python** 3 conda activate aaa 4 interpreter里面去选择刚搞好的编译器 ...../conda.exe

软考随记(二)

I/O系统的5种不同的工作方式&#xff1a; 程序控制方式&#xff1a; 无条件查询&#xff1a;I/O端口总是准备好接受主机的输出数据&#xff0c;或是总是准备好向主机输入数据&#xff0c;而CPU在需要时随时直接利用I/O指令访问相应的I/O端口&#xff0c;实现与外设的数据交换 …

9.Halcon3D点云力矩求解-平面拟合用法

1.实现效果 我们在使用3d相机对产品进行扫描生成点云的时候,由于安装问题,所以我们不可能保证每次产品扫描出来都在坐标系中位置和姿态非常标准。 上述算法描述的就是在某一个维度或者某几个维度上将点云数据和坐标系对齐; 至于怎么对齐,如何实现就是今天的内容。 本人能…

【UE5.1 角色练习】10-物体抬升、抛出技能 - part2

目录 前言 效果 步骤 一、让物体缓慢的飞向手掌 二、向着鼠标方向发射物体 前言 在上一篇&#xff08;【UE5.1 角色练习】08-物体抬升、抛出技能 - part1&#xff09;的基础上继续完成角色将物体吸向手掌&#xff0c;然后通过鼠标点击的方向来发射物体的功能。 效果 步骤…

华为 CANN

华为 CANN 1 介绍1.1 概述1.2 CANN 是华为昇腾计算产业的重要一环1.3 昇腾系列处理器1.4 昇腾 AI 产业1.5 从 AI 算法到产品化落地流程1.6 多样性计算架构1.7 人工智能各层级图示1.8 人工智能技术发展历史 2 CANN vs CUDA支持平台优化方向编程接口生态系统与应用性能与功能 3 C…

民国漫画杂志《时代漫画》第36期.PDF

时代漫画36.PDF: https://url03.ctfile.com/f/1779803-1248636233-8a4a9d?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

day23--单元测试-反射-注解-动态代理

day23-单元测试、反射 恭喜同学们&#xff0c;Java主要的知识我们其实已经学习得差不多了。今天同学们再把单元测试、反射、注解、动态代理学习完。Java的基础知识就算全齐活了。 首先&#xff0c;我们进入单元测试的学习。 一、单元测试 1.1 单元测试快速入门 所谓单元测…

mimkatz获取windows10明文密码

目录 mimkatz获取windows10明文密码原理 lsass.exe进程的作用 mimikatz的工作机制 Windows 10的特殊情况 实验 实验环境 实验工具 实验步骤 首先根据版本选择相应的mimikatz 使用管理员身份运行cmd 修改注册表 ​编辑 重启 重启电脑后打开mimikatz 在cmd切换到mi…

相同的树(oj题)

一、题目链接https://leetcxode-cn.com/problems/same-tree/ 二、题目思路 遍历整颗树&#xff0c;判断两棵树的每个位置的结点都相同。 每个结点的左右孩子结点都要综合判断 三、题解代码 bool isSameTree(struct TreeNode* p, struct TreeNode* q) {//如果两颗树的根结点…

MVC、MVP 和 MVVM 架构总结

MVC、MVP 和 MVVM 是常见的软件架构模式&#xff0c;主要用于组织应用程序的结构&#xff0c;特别是在用户界面和业务逻辑之间进行分离。以下是对它们的详细解释&#xff0c;包括它们的差异、优缺点。 MVC&#xff08;Model-View-Controller&#xff09; 结构 Model&#xf…

unicloud 云对象

背景和优势 20年前&#xff0c;restful接口开发开始流行&#xff0c;服务器编写接口&#xff0c;客户端调用接口&#xff0c;传输json。 现在&#xff0c;替代restful的新模式来了。 云对象&#xff0c;服务器编写API&#xff0c;客户端调用API&#xff0c;不再开发传输json…

万字长文详解QUIC协议,为什么有了TCP我们还需要QUIC?

本文目录 1.前言2. HTTP缺点缺点一&#xff1a;建立连接的握手延迟大缺点二&#xff1a;多路复用的队首阻塞缺点三&#xff1a;TCP协议的更新滞后 3.TCP缺点3.QUIC优点一&#xff1a;避免队首阻塞的多路复用优点二&#xff1a;支持连接迁移优点三&#xff1a;可插拔的拥塞控制优…

TiDB-从0到1-MVCC

TiDB从0到1系列 TiDB-从0到1-体系结构TiDB-从0到1-分布式存储TiDB-从0到1-分布式事务TiDB-从0到1-MVCC 一、MVCC Multi-Version Concurrency Control 多版本并发控制&#xff0c;其主要解决了读并发的问题。 其维持一个数据的多个版本使读写操作没有冲突。也就是说数据元素X…

多维数组操作,不要再用遍历循环foreach了!来试试数组展平的小妙招!array.flat()用法与array.flatMap() 用法及二者差异详解

目录 一、array.flat&#xff08;&#xff09;方法 1.1、array.flat&#xff08;&#xff09;的语法及使用 ①语法 ②返回值 ③用途 二、array.flatMap() 方法 2.1、array.flatMap()的语法及作用 ①语法 ②返回值 ③用途 三、array.flat&#xff08;&#xff09;与a…

Android MediaCodec 简明教程(九):使用 MediaCodec 解码到纹理,使用 OpenGL ES 进行处理,并编码为 MP4 文件

系列文章目录 Android MediaCodec 简明教程&#xff08;一&#xff09;&#xff1a;使用 MediaCodecList 查询 Codec 信息&#xff0c;并创建 MediaCodec 编解码器Android MediaCodec 简明教程&#xff08;二&#xff09;&#xff1a;使用 MediaCodecInfo.CodecCapabilities 查…

接入knife4j-openapi3访问/doc.html页面空白问题

大概率拦截器拦截下来了&#xff0c;我们F12看网络请求进行排查 都是 /webjars/ 路径下的资源被拦截了&#xff0c;只需在拦截器中添加该白名单即可"/webjars/**" 具体配置如下&#xff1a; Configuration public class WebConfig implements WebMvcConfigurer {priv…

百度智能云与博彦科技达成战略合作 共同推动千行百业智能化升级

5月30日&#xff0c;百度智能云与博彦科技签署战略合作协议&#xff0c;双方已经基于以百度智能云千帆大模型平台为核心的产品、解决方案&#xff0c;在市场拓展、集成开发、实施交付、运营运维等领域开展深度合作&#xff0c;未来将进一步共同推动大模型技术创新和行业应用落地…