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

目录

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 1010

	int 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 0110
	
	return 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 255
	return 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);

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

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

相关文章

Eolink Apikit 创建/生成 API 文档

在 API 研发管理产品中&#xff0c;几乎所有的协作工作都是围绕着 API 文档进行的。 我们在接触了大量的客户后发现&#xff0c;采用 文档驱动 的协作模式会比先开发、后维护文档的方式更好&#xff0c;团队协作效率和产品质量都能得到提高。因此我们建议您尝试基于文档来进行工…

前脚我的 GPT4 被封,后脚收到了文心一言的邀请账号

大家好&#xff0c;我是二哥呀。 一早醒来&#xff0c;我的 ChatGPT Plus 账号就惨遭封禁&#xff0c;很不幸&#xff0c;我刚冲的 Plus 会员&#xff0c;用了不到一周的时间&#xff08;&#x1f62d;&#xff09;。 我没用亚洲的IP&#xff0c;所以网上传的那些不使用亚洲IP…

Python图像处理【11】利用反卷积执行图像去模糊

利用反卷积执行图像去模糊0. 前言1. 图像模糊检测1.1 拉普拉斯 (Laplacian) 方差阈值1.2 使用 OpenCV 执行模糊检测2. 使用 SimpleITK 反卷积滤波器实现非盲去模糊2.1 去模糊分类2.2 实现非盲去模糊3. 使用 scikit-image 执行非盲去模糊小结系列链接0. 前言 我们已经知道可以使…

c++11 标准模板(STL)(std::unordered_multimap)(三)

定义于头文件 <unordered_map> template< class Key, class T, class Hash std::hash<Key>, class KeyEqual std::equal_to<Key>, class Allocator std::allocator< std::pair<const Key, T> > > class unordered…

2023年的深度学习入门指南(2) - 给openai API写前端

2023年的深度学习入门指南(2) - 给openai API写前端 上一篇我们说了&#xff0c;目前的大规模预训练模型技术还避免不了回答问题时出现低级错误。 但是其实&#xff0c;人类犯的逻辑错误也是层出不穷。 比如&#xff0c;有人就认为要想学好chatgpt&#xff0c;就要先学好Pyth…

【AI JUST AI】Stable Disffusion | 配合Chrome插件,与Notion API完美联动

【AI JUST AI】Stable Disffusion | 配合Chrome插件&#xff0c;与Notion API完美联动第一步、Stable Diffusion 链接 CMS开发Chrome插件在合适的位置增加一个发送至Notion的按钮编写按钮的逻辑部分使用GitHub作为图床图片上传 API第二步&#xff0c;使用Chat GPT优化样式Stabl…

超详细WindowsJDK1.8与JDK11版本切换教程

文章目录一、JDK生效原理二、安装配置JDK11三、切换JDK11版本四、查看切换JDK11版本是否成功五、再次切换至JDK8版本六、查看切换JDK8版本是否成功一、JDK生效原理 想必大家都在为如何流畅的切换JDK版本问题而来&#xff0c;那么在此篇文章开始之前&#xff0c;首先我们来思考一…

网络传输层

目录传输层再谈端口号端口号范围划分认识知名端口号netstatpidofUDP协议UDP协议端格式UDP的特点面向数据报UDP的缓冲区UDP使用注意事项使用udp协议 的应用层协议其它TCP协议TCP协议段格式如何理解链接如何理解三次握手如何理解四次挥手概念TIME_WAIT/CLOSE_WAITTCP策略确认应答…

【wps】【毕业论文】三线表的绘制

目录 一、三线表 二、制作步骤 &#xff08;1&#xff09;点击“插入”——点击“表格”创建一个表格 &#xff08;2&#xff09;选中整个表格——鼠标右键选择“边框和底纹”&#xff0c;“表格属性”再点击“边框和底纹”——点击“自定义”——选择表格的边的宽度——如图…

北京筑龙智能寻源 |助力企业一站式智能采购,降本增效

智能寻源——精准匹配&#xff0c;让采购更高效 智能寻源系统是北京筑龙为采购人搭建的一款全链路高效协同的采购寻源和供应商管理平台。助力采购人快速完成采购计划&#xff0c;提升采购效率&#xff0c;降低采购风险。 基于智能寻源系统&#xff0c;将全面打通供应商数据壁…

VR数字政务,VR全景技术,探索数字化治理新路径

近年来&#xff0c;随着虚拟现实&#xff08;VR&#xff09;技术的不断发展&#xff0c;VR数字政务也逐渐成为行政数字化转型的重要组成部分。VR数字政务可以为行政部门提供全新的数字化解决方案&#xff0c;使行政部门的工作更加高效、便捷和安全。 一、VR数字政务的定义和概述…

ABBYY FineReader PDF15下载安装教程

刚刚&#xff0c;老板给我一堆扫描文件&#xff08;图片和pdf文件&#xff09;&#xff0c;拿不到源文件&#xff0c;让我把客户发的扫描文件搞成word文档&#xff0c;密密麻麻&#xff0c;这些文件100多页&#xff0c;这要手工敲能把手敲费。 这时候&#xff0c;让我想到了这…

小白的git入门教程(三)

书接上文&#xff0c;我们讲到如何进行版本日志回退&#xff0c;根据这个&#xff0c;我们可以返回到任意状态 今天让我们接着讲完git的基本指令操作教程以及其余分支 删除文件操作 前提&#xff1a;要被删除的文件已经存储在本地库中 这里我们可以创建一个文件&#xff08;待…

ActiViz.NET 9.2.2023 Crack

适用于 .Net C# 和 Unity 的 3D 可视化库 释放可视化工具包的强大功能&#xff0c;在 C#、.Net 和 Unity 软件中为您的 3D 内容服务。 ActiViz 允许您轻松地将 3D 可视化集成到您的应用程序中。 Kitware 围绕 ActiViz 和 3D 应用程序提供支持和自定义开发 活动可视化功能 C…

【Java代码审计】表达式注入

1 前置知识 1.1 EL表达式 EL表达式主要功能&#xff1a; 获取数据&#xff1a;可以从JSP四大作用域中获取数据执行运算&#xff1a;执行一些关系运算&#xff0c;逻辑运算&#xff0c;算术运算获取web开发常用对象&#xff1a;通过内置 的11个隐式对象获取想要的数据调用jav…

STL容器之initializer_list与set

STL容器之initializer_list与setinitializer_list案例二&#xff08;实现n个数的加法&#xff09;set单集合有序性唯一性删除元素多重集合less与greater自定义类型initializer_list initializer_list创建的对象&#xff0c;初始值可以有很多个&#xff0c;像vector 一样 想多少…

第05章_排序与分页

第05章_排序与分页 &#x1f3e0;个人主页&#xff1a;shark-Gao &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是shark-Gao&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f389;目前状况&#xff1a;23届毕业生&#xff0c;目前在…

SPI、I2C、CAN通信的简单介绍和笔记

标题中的三种通信方式&#xff08;协议&#xff09;是比较常见的一些通信协议&#xff0c;对于它们有一定的了解对于我们学习嵌入式单片机的学习有着非常重要的作用。于是我们对此有一些信息给到各位读者&#xff0c;这也是笔者自己巩固知识点的方式。如果觉得有帮到各位&#…

551、Elasticsearch详细入门教程系列 -【分布式全文搜索引擎 Elasticsearch(二)】 2023.04.04

目录一、Elasticsearch创建/查看/删除索引、创建/查看/修改/删除文档、映射关系1.1 Elasticsearch中的数据格式1.2 索引操作1.2.1 创建索引1.2.2 查看指定索引1.2.3 查看全部索引1.2.4 删除索引1.3 文档操作1.3.1 创建文档1.3.2 查看单个文档&#xff1a;主键查询1.3.3 查看所有…

不敲代码用ChatGPT开发一个App

先说下背景&#xff0c;有一天我在想 ChatGPT 对于成熟的开发者来说已经是一个非常靠谱的助手了&#xff0c;身边也确实有很多同事把它作为一个离不开的助理担当。 但是如果我只是略微懂一点前端知识的新人&#xff0c;了解 HTML、CSS、JS 相关的知识&#xff0c;想开发一个安…