当前位置: 首页 > news >正文

数据在内存中的存储(深度剖析)

目录

1.数据类型介绍

1.1类型分类

2.整形在内存中的存储

2.1原码,反码,补码

2.2大小端介绍

2.3练习

3.浮点型在内存中的存储

3.1浮点数存储规则


引入:

正负的数据可以存放在有符号的变量中

只有正数的数据可以存放在无符号的变量中

如果是有符号的数据,最高位是符号位,最高位是0,表示正数,最高位是1,表示负数

对于无符号数来说,最高位也是数据位

1.数据类型介绍

char          //字符数据类型
short         //短整型
int             //整形
long          //长整型
long long  //更长的整形
float          //单精度浮点数
double      //双精度浮点数

 类型的意义:

1.使用这个类型开辟内存空间的大小(大小决定了使用范围)

2.如何看待内存空间的视角

1.1类型分类

整形家族

char 

        unsigned char

        signed char

short 

        unsigned short

        signed char 

int 

        unsigned int 

        signed int

long 

        unsigned long

        signed long 

其中,若定义

char c; //不能确定char是否有符号,往往取决于编译器

char在内存中只占用一个字节,一个字节占8个比特位,取值范围是-128~127

浮点数家族

float

double

long double

 构造类型

 数组类型  eg:int arr[10];//arr的类型是int[10]
 结构体类型 struct
 枚举类型 enum
 联合类型 union

指针类型

int *pi;
char *pc;
float* pf;
void* pv;

指针变量是用来存放地址的

空类型

void 表示空类型(无类型)

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

2.整形在内存中的存储

2.1原码,反码,补码

整数有此三种表现方法,均有符号位和数值位,符号位0为正,1为负。

如何表示负整数?

原码:直接将数值按照正负数的形式翻译成二进制

反码:符号位不变,其他位按位取反

补码:反码+1,即得到补码

正数的原反补码相同

int main()
{int a = 10;//正数的原反补码都一样//0000 0000 0000 0000 0000 0000 0000 1010int b = -10;//1000 0000 0000 0000 0000 0000 0000 1010//1111 1111 1111 1111 1111 1111 1111 0101//1111 1111 1111 1111 1111 1111 1111 0110return 0;
}

对于整形来说:数据存放内存中其实存放的是补码,为何?

使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理(CPU只有加法器);此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

 2.2大小端介绍

什么是大小端:

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

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

 判断大小端

#include <stdio.h>
int check_sys()
{int i = 1;return (*(char *)&i);
}
int main()
{int ret = check_sys();if(ret == 1){printf("小端\n");}else{printf("大端\n");}return 0;
}

2.3练习

#include <stdio.h>
int main()
{char a = -1;signed char b = -1;unsigned char c = -1;printf("a=%d,b=%d,c=%d", a, b, c);//-1 -1 255return 0;
}

无符号char类型打印整形会发生整形提升

如何进行整形提升?

1.查看所要整形提升的变量原类型是什么

2.若是无符号类型,高位补0直到32位即可

   若是有符号类型,看最高位(符号位)是什么,是0补0,是1补1

上题为例:unsigned char c = -1;//是无符号数char类型,输出为整形时需要发生整形提升

补码:1111 1111

发生整形提升,原类型是无符号类型

0000 0000 0000 0000 0000 0000 1111 1111

二进制转十进制--->255

3.浮点型在内存中的存储

3.1浮点数存储规则

根据IEEE754规定,任意一个二进制浮点数V可以表示为

(-1)^S * M * 2^E
(-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数。
M表示有效数字,大于等于1,小于2。
2^E表示指数位。

对于32位的浮点数,最高位是符号位s,接着的8位是指数E,剩下的23位为有效数字M

 IEEE754对有效数字M和指数E,还有一些特别的规定

1<M<2时,M写成1.xxx的形,其中xxx表示小数部分,而第一位“1”可以省去

指数E:E=e+127

eg:

真值:0.5

二进制:0.1

----> (-1)^0 * 1.0*2^(-1)  其阶码E=-1+127=126---->0111 1110

则其二进制表示形式:0 0111 1110 0000 0000 0000 000

                                    s        E                      M

E全为0

这时,浮点数的指数E等于1-127(或者1-1023)即为真实值,
有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。这样做是为了表示±0,以及接近于0的很小的数字。

E全为1
这时,如果有效数字M全为0,表示±无穷大(正负取决于符号位s);

相关文章:

数据在内存中的存储(深度剖析)

目录 1.数据类型介绍 1.1类型分类 2.整形在内存中的存储 2.1原码&#xff0c;反码&#xff0c;补码 2.2大小端介绍 2.3练习 3.浮点型在内存中的存储 3.1浮点数存储规则 引入&#xff1a; 有正负的数据可以存放在有符号的变量中 只有正数的数据可以存放在无符号的变量…...

python 实现二叉搜索树的方法有哪些?

树的介绍 树不同于链表或哈希表&#xff0c;是一种非线性数据结构&#xff0c;树分为二叉树、二叉搜索树、B树、B树、红黑树等等。 树是一种数据结构&#xff0c;它是由n个有限节点组成的一个具有层次关系的集合。用图片来表示的话&#xff0c;可以看到它很像一棵倒挂着的树。…...

ORM概述

1_ORM概述[理解] 解释: 对象关系映射模型特点: 1.将类名,属性, 映射成数据库的表名和字段2.类的对象,会映射成为数据库表中的一行一行的数据 优缺点: 优点: 1.不再需要编写sql语句2.不再关心使用的是什么数据库了 缺点: 1.由于不是直接通过sql操作数据库,所以有性能损失 2_…...

程序员必知必会7种UML图(类图、序列图、组件图、部署图、用例图、状态图和活动图)画法盘点

众所周知&#xff0c;软件开发是一个分阶段进行的过程。不同的开发阶段需要使用不同的模型图来描述业务场景和设计思路&#xff0c;在不同的阶段输出不同的设计文档也是必不可少的&#xff0c;例如&#xff0c;在需求分析阶段需要输出领域模型和业务模型&#xff0c;在架构阶段…...

基于asp的搜索引擎开发和实现

随着因特网的迅猛发展、WEB信息的增加&#xff0c;用户要在信息海洋里查找信息&#xff0c;就像大海捞针一样&#xff0c;搜索引擎技术恰好解决了这一难题。目前&#xff0c;搜索引擎系统可以分类三大类&#xff0c;分别是&#xff1a;目录式搜索引擎&#xff1a;以人工方式或半…...

代码随想录刷题-字符串-实现 strStr()

文章目录实现 strStr()习题暴力解法kmp 解法实现 strStr() 本节对应代码随想录中&#xff1a;代码随想录&#xff0c;讲解视频&#xff1a;帮你把KMP算法学个通透&#xff01;&#xff08;理论篇&#xff09;_哔哩哔哩_bilibili、帮你把KMP算法学个通透&#xff01;&#xff0…...

前端已死?金三银四?你收到offer了吗?

目录 一、前言 二、“唱衰” 三、不局限于框架、前端 四、打动面试官 五、正向加成 六、小结 一、前言 最近在脉脉、知乎等平台都有人在渲染前端从业人员的危机&#xff0c;甚至使用“前端已死”的字眼&#xff0c;颇有“语不惊人死不休”的意味&#xff0c;对老鸟来说&a…...

C生万物 | 十分钟带你学会位段相关知识

结构体相关知识可以先看看这篇文章 —— 链接 一、什么是位段 位段的声明和结构是类似的&#xff0c;有两个不同&#xff1a; 位段的成员必须是 int、unsigned int 或signed int位段的成员名后边有一个冒号和一个数字 在下面&#xff0c;我分别写了一个结构体和一个位段&…...

Spring Boot基础学习之(十):修改员工的信息

注意&#xff1a;spring boot专栏是一个新手项目&#xff0c;博文顺序则是功能实现的流程&#xff0c;如果有看不懂的内容可以到前面系列去了解。 本次项目所有能够使用的静态资源可以免费进行下载 静态资源 在本篇代码DAO层将通过Java文件去实现&#xff0c;在这里就不连接数…...

闭关十几天,我完成了我的毕业设计

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;也会涉及到服务端&#xff08;Node.js&#xff09; &#x1f4c3;个人状态&#xff1a; 在校大学生一枚&#xff0c;已拿多个前端 offer&#xff08;…...

认识rust的项目管理工具--cargo

cargo 提供了一系列的工具&#xff0c;从项目的建立、构建到测试、运行直至部署&#xff0c;为 Rust 项目的管理提供尽可能完整的手段。不过&#xff0c;我们无需再手动安装&#xff0c;之前安装 Rust 的时候&#xff08;用rustup或者vscode加插件的方式安装&#xff09;&#…...

面试常问的Linux之 I/O 复用

I/O 复用 一、I/O的概念 在Linux系统中&#xff0c;I/O&#xff08;输入/输出&#xff09;指的是计算机系统的数据交换过程&#xff0c;包括从外部设备读取数据&#xff08;输入&#xff09;和将数据发送到外部设备&#xff08;输出&#xff09;。I/O操作是Linux系统中非常重要…...

MySQL-binlog+dump备份还原

目录 &#x1f341;binlog日志恢复 &#x1f342;binlog介绍 &#x1f342;Binlog的用途 &#x1f342;开启binary log功能 &#x1f342;配置binlog &#x1f341;mysqldump &#x1f342;数据库的导出 &#x1f342;数据库的导入 &#x1f341;mysqldumpbinlog &#x1f990;…...

互联网络-单级互联网络

1.立方体单级网络 1.定义 立方体单级网络(cube)的名称来源于下图所示的三维立方体结构,如010只能连接到000、011、110,不能直接连接到对角线上的001、100、101、111。 2.例题 1.编号为0、1、2、3、4,…,15的16个处理器,用单级互联网络互联,用Cube0互联函数时,与第10…...

上海亚商投顾:沪指四连阳重回3300点 中字头个股再发力

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪大小指数今日走势分化&#xff0c;沪指低开后震荡反弹&#xff0c;创业板指盘中跌超1%。中字头个股再度发力&#x…...

LeetCode:150. 逆波兰表达式求值—栈

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; &#x1f33b;算法&#xff0c;不如说它是一种思考方式&#x1f340;算法专栏&#xff1a; &#x1f449;&#x1f3fb;123 一、&#x1f331;150. 逆波兰表达式求值 题目描述&#xff1a;给你一个字符串数组 token…...

C/C++每日一练(20230410) 二叉树专场(4)

目录 1. 二叉搜索树迭代器 &#x1f31f;&#x1f31f;&#x1f31f; 2. 验证二叉搜索树 &#x1f31f;&#x1f31f;&#x1f31f; 3. 不同的二叉搜索树 II &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专…...

策化整理1

概述&#xff1a; 本游戏是一款恐怖类解密游戏&#xff0c;以反应毒品的危害和反对家庭暴力为主题 在游戏中玩家扮演被困入梦境内的主人公&#xff0c;寻找逃出梦境的方法 本游戏故事大背景&#xff1a; 主人公的父亲是一名毒贩&#xff0c;在母亲发现父亲开始吸毒后选择与父亲…...

【服务通信自定义srv调用3----客户端的优化】

客户端的优化 服务通信自定义srv调用&#xff0c;客户端随意提交两个数&#xff0c;完成数的相加。也就是实现参数的动态提交&#xff1a; 1.格式&#xff1a;rosrun xxxx xxxx 12 34 2.节点执行时候&#xff0c;需要获取命令中的参数&#xff0c;并且组织进 request 代码中应…...

React跨域解决方案

一、跨域日志报错 我们由于项目需要经常会需要对不同域名、不同子域的网站接口发起请求&#xff0c;有时甚至是对于同一域名的不同端口发起请求&#xff0c;此时我们经常看到以下报错&#xff1a; Access to XMLHttpRequest at xxx from origin xxx has been blocked by COR…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...