第十八章(数据在内存中的储存)

news2024/11/24 3:46:25

1. 整数在内存中的存储

2. ⼤⼩端字节序和字节序判断

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

          我本将心向明月,奈何明月照沟渠

正文开始

一、.整数在内存中的储存

整数的2进制的表示方法有三种
1.原码
2.反码
3.补码

这里在第十章我们有详细讲解,有需要的同学可以自行观看。

二、大小端字节序和字节序判断

int main()
{
	int a = 0x11223344;
	return 0;
}

在这里插入图片描述
2.1 什么是大小端字节序储存呢?

我们来用图形来表示一下

在这里插入图片描述
小端字节序: 是数据的低字节内容保存在低地址处数据的高字节内容保存在高地址处

大端字节序:是数据的低字节内容保存在高地址处
数据的高字节内容保存在低地址处

int check_system(void)
{
	int i = 1;
	return (*(char*)&i);  // 这里我们来强制类型转换是为了判断它的起始收字符是不是为1
		//,如果是1就是小端,否则就大端
}
int main()
{
	int ret = check_system();
	if (1 == ret)
	{
		printf("小端");
	}
	else
	{
		printf("大端");

	}
	return 0;
}

我们该计算机系统用的是小端字节序

三、浮点数在内存中的存储
常见的浮点数:3.14159 、1E10 等,浮点数的家族包括 float,double,long double 类型

这里我们先引入一个练习

#include <stdio.h>
int main()
{
	int n = 9;
	float* pFloat = (float*)&n;
	printf("n的值为:%d\n", n);
	printf("*pFloat的值为:%f\n", *pFloat);
	*pFloat = 9.0;
	printf("num的值为:%d\n", n);
	printf("*pFloat的值为:%f\n", *pFloat);
	return 0;
}

在这里插入图片描述
3.2 浮点数的存储

通过上面我们可以看出,n 和*pFloat 在明明是一个数,为什么浮点数和整数的解读结果会差别很大呢?

我们可以猜测一下,难道是因为浮点数和整数的储存方式是不一样的吗?
接下来我们来分析浮点数在内存中的储存方式

根据国际标准IEEE(电⽓和电⼦⼯程协会) 754,任意⼀个⼆进制浮点数V可以表⽰成下⾯的形式:
V = (−1) ∗ S M ∗ 在这里插入图片描述

• (−1)S 表⽰符号位,当S=0,V为正数;当S=1,V为负数
• M 表⽰有效数字,M是⼤于等于1,⼩于2的
在这里插入图片描述
表示的是指数位

举例来说:十进制的5.0,写成二进制是101.0,相当于1.01 * 2^2
那么我们按照上边的关系就可以得出

  1. S = 0
  2. M=1.01
  3. E = 2

IEEE规定:
对于32位的浮点数,最高的1位储存符号位 S ,接着8位储存指数E,剩下的32位储存有效数字M

对于64位的浮点数,最高的1位储存符号位 S ,接着11位储存指数E,剩下的52位储存有效数字M
在这里插入图片描述
3.2.1 浮点数储存的一些特点
对于有效数字M和指数E
还有一些特殊的规定:
1.
前⾯说过, 1≤M<2 ,也就是说,M可以写成 1.xxxxxx 的形式,其中 xxxxxx 表⽰⼩数部分。在计算机内部保存M时,默认这个数的第⼀位总是1,因此可以被舍去,只保存后⾯的xxxxxx部分。⽐如保存1.01的时候,只保存01,等到读取的时候,再把第⼀位的1加上去。这样做的⽬的,是节省1位有效数字。以32位浮点数为例,留给M只有23位,将第⼀位的1舍去以后,等于可以保存24位有效数字。

首先我们要知道的是E为一个无符号整数
但是科学计数法E是可以出现负数的,所以规定就说
存⼊内存时E的真实值必须再加上⼀个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数1023。⽐如,2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即10001001。

3.2.2
浮点数取得过程
指数E从内存中取出还可以分为以下三种情况

1.E不全为0或不全为1(正常取)
这时,浮点数就采⽤下⾯的规则表⽰,即指数E的计算值减去127(或1023),得到真实值,再将有效
数字M前加上第⼀位的1。
在这里插入图片描述

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

在这里插入图片描述

3.E全为1
这时,如果有效数字M全为0,表⽰±⽆穷⼤(正负取决于符号位s);
在这里插入图片描述
这里我们就可以重新的分析上边的那个例子

#include <stdio.h>
int main()
{
	int n = 9;
	//9的正数原码反码补码都是
	//00000000000000000000000000001001
	float* pFloat = (float*)&n;
	//0 00000000 00000000000000000001001
	
	printf("n的值为:%d\n", n);
	printf("*pFloat的值为:%f\n", *pFloat);
	// S = 0 ,E = 1-127 , M = 00000000000000000001001
	// V = (-1)^0 × 0.00000000000000000001001×2^(-126)=1.001×2^(-146) 约等于0


	*pFloat = 9.0;
	//9.0的二进制为1001.0 = 1.001 * 2^3
	//9.0在内存中的储存为
	//0 10000010 0010000000000000000000
	printf("num的值为:%d\n", n);
	// 按照 十进制的读取方式就为
	//0100000100010000000000000000000  ==1091567616
    //0 为正整数原码反码补码相同
	printf("*pFloat的值为:%f\n", *pFloat);
	//0 10000010 0010000000000000000000
	//我们还原 就可得到
	//S = 0
	//M = 1.001
	//E = 130-127 = 3
	//V = (-1)^0 * 1.001 * 2^3
	return 0;
}

总结:
我们在内存中如果以整数储存数据,但是用浮点数的方式来读取,用的是浮点数的读取规则。

我们在内存中如果以浮点数储存数据,但是用整数的方式来读取,用的是整数的读取规则。

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

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

相关文章

网络编程项目框架内容

基于TCP的云端书阅管理系统 通过网络实现图书借阅网站&#xff0c;包括服务器与客户端&#xff0c;客户端与服务器是基于TCP连接。 客户端描述&#xff1a;客户端运行会与服务器端进行连接&#xff0c;连接成功后&#xff0c;显示注册登录界面。此时&#xff0c;客户端可以选…

算法: FriendShip - Kruskal+并查集判环

题目 A-Friendship_2024.5.7 (nowcoder.com) 思路分析 求所有符合题意情况的最大值中的最小值&#xff1b;符合题意是指保证图的连通性。那么贪心思路&#xff0c;将所有已存在的关系和可能存在的关系存储起来&#xff0c;利用Kruskal贪心算法每次取权值最小的且不构成回路的…

从零开始讲PCIe(2)——PCI总线传输模型与机制

一、前言 在之前的内容中&#xff0c;我们已经对PCI有了一些基本的认识&#xff0c;我们了解了PCI的一般架构&#xff0c;标准传输周期等相关的内容&#xff0c;接下来我们会进一步了解PCI具体的传输模型和传输机制。 二、PCI传输模型 PCI一共有三种数据传输模型&#xff0c;分…

Windows安装ollama和AnythingLLM

1、Ollama安装部署 1&#xff09;安装ollama 官网下载&#xff1a;https://ollama.com/download&#xff0c;很慢 阿里云盘下载&#xff1a;https://www.alipan.com/s/jiwVVjc7eYb 提取码: ft90 百度云盘下载&#xff1a;https://pan.baidu.com/s/1o1OcY0FkycxMpZ7Ho8_5oA?…

Python-初识Python

前言&#xff1a;在这篇博客当中&#xff0c;我们将步入Python知识的殿堂&#xff0c;Python以其简单、易学、开发效率高在近些年的发展可谓是迅猛&#xff0c;在许多领域都可以见到它的场景&#xff0c;例如&#xff1a;人工智能/机器学习、大数据开发、后端开发等都会用到。 …

仕考网:公务员国考有三不限岗位吗?

国家公务员考试中的“三不限”岗位&#xff0c;即不限制专业背景、政治面貌、基层工作经验的职位。在国考中&#xff0c;是有的但是数量比较少。 这些岗位主要集中在省级及以下单位&#xff0c;以民航空警和铁路公安为主。其中&#xff0c;有一半的职位是面向四项目人员&#…

基于STM32的蓝牙音乐播放器设计

引言 本项目将基于STM32微控制器设计一个简易的蓝牙音乐播放器&#xff0c;通过蓝牙模块接收手机的音乐信号&#xff0c;并使用音频解码芯片播放音乐。该项目展示了STM32在嵌入式音频处理与蓝牙通信方面的应用。 环境准备 1. 硬件设备 STM32F103C8T6 开发板&#xff08;或其…

基于Java,SpringBoot,Vue智慧校园健康驿站体检论坛请假管理系统

摘要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差&#xf…

持续更新:当前最好用的AI 编程工具,Cursor 编程指南

本文持续更新&#xff0c;敬请期待更多内容。 文章目录 这一次&#xff0c;AI真懂你的代码关注该关注的&#xff0c;忽略该忽略的1. 创建.cursorignore文件2. 重新索引代码库 参考资料 这一次&#xff0c;AI真懂你的代码 如果你偶尔关注一些AI编程相关的内容&#xff0c;想必你…

介绍多环境开发-分组(springboot-profile)

背景 在使用 Spring Boot 进行开发时&#xff0c;多环境配置是一项非常常见的需求。通常&#xff0c;我们会在开发、测试、生产等不同环境下部署同一个应用程序&#xff0c;而这些环境可能需要不同的配置&#xff0c;例如数据库连接、日志级别等。Spring Boot 通过 profile&am…

python交互式命令时如何清除

在交互模式中使用Python&#xff0c;如果要清屏&#xff0c;可以import os&#xff0c;通过os.system()来调用系统命令clear或者cls来实现清屏。 [python] view plain copy print? >>> import os >>> os.system(clear) 但是此时shell中的状态是&#xff1a;…

windows的一些容易忽视的使用记录

文章目录 快捷键更改电脑名字共享文件夹添加新账号&#xff08;本地的&#xff09;更改快捷访问 以下都基于 win 10。 快捷键 win I 直接打开设置。 win R 打开运行栏。这个非常常用。 更改电脑名字 先 win I 打开设置&#xff0c;然后点击系统。 左侧栏拉到最下面&…

Android开发高级篇:MVVM框架与数据双向绑定

在Android开发中&#xff0c;MVVM&#xff08;Model-View-ViewModel&#xff09;架构模式以其高效、简洁的特点&#xff0c;成为越来越多开发者的首选。MVVM不仅实现了界面&#xff08;UI&#xff09;与业务逻辑的分离&#xff0c;还通过数据双向绑定技术&#xff0c;极大地简化…

iterator的使用+求数组中的第n大值+十大经典排序算法

目录 一、iterator的用法 二、求一个数组中的第n大值&#xff08;n为2或者3&#xff09; 1、求一个数组中的第二大值&#xff08;不能使用排序&#xff09; 2、求一个数组中的第三大值&#xff08;不能使用排序&#xff09; 三、冒泡排序 1、基本思想 2、代码实现 3、存…

AQS原理(AbstractQueuedSynchronizer)

本篇为 [并发与多线程系列] 的第四篇&#xff0c;对应Java知识体系脑图中的 并发与多线程 模块。 这一系列将对Java中并发与多线程的内容来展开。 AQS原理&#xff08;AbstractQueuedSynchronizer&#xff09; AQS原理&#xff08;AbstractQueuedSynchronizer&#xff09;AQS整…

java解决跨域问题时的403报错

什么是跨域问题&#xff1f; 当一个请求的url的协议&#xff0c;域名&#xff0c;端口三者之间任意一个与当前页面url不同 即为跨域 问题背景&#xff1a; 如图&#xff0c;前端端口为8090&#xff0c;而后端端口为8099&#xff0c;形成跨域&#xff0c;无法对接 试图利用Spr…

【MySQL面试高频误区】不可重复读和幻读到底有哪些区别?

欢迎关注公众号 【11来了】 &#xff0c;持续 MyBatis 源码系列内容&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址&#xff1a;点击查看文章导读&#xff01; 感谢你的关注&#xff…

zotero使用koofr+google drive/onedrive同步

最早了解到这个思路是来自 知乎-【从零开始使用Zotero】(3) Zotero文献同步方式 和 How to Sync Zotero Files Using WebDAV and Google Drive with Koofr: A Step-by-Step Guide 虽然周围很多人都在用Readpaper这种web端的了&#xff0c;但是经常逛Arxiv而且zotero的web插…

论文翻译 | Language Models are Few-Shot Learners 语言模型是少样本学习者(下)

6 更广泛的影响 语言模型对社会有着广泛的有益应用&#xff0c;包括代码和写作自动补全、语法辅助、游戏叙事生成、提高搜索引擎响应以及回答问题等。但它们也可能有潜在的危害性应用。GPT-3在文本生成质量和适应性方面优于较小的模型&#xff0c;并且增加了区分合成文本与人类…

使用GitLab CI构建持续集成案例

1. 部署GitLab &#xff08;1&#xff09;基础准备 解压软件包并导入镜像&#xff1a; [rootmaster ~]# curl -O http://mirrors.douxuedu.com/competition/Gitlab-CI.tar.gz [rootmaster ~]# tar -zxvf Gitlab-CI.tar.gz [rootmaster ~]# ctr -n k8s.io image import gitla…