《数据在内存中的存储》

内存函数

1. 整数在内存中的存储

(1)旧识回顾:

之前在学到操作符的时候,我们就学过了下面的内容:
整数的二进制的表示方式有三种,原码反码补码
有符号的整数,三种表示方式均有符号位和数值位两部分,其中符号位是用"0"表示正,用"1"表示负,其他的都是数值位。
正整数的原、反、补码的表示方式都一样。
负整数的三种表示方式不同。

原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码
反码:将原码的符号位不变,其他位依次按位取反就可以得到反码
补码:反码+1就得到补码
对于整形来说:数据存放内存中其实存放的是二进制的补码
为什么呢:
在计算机系统中,数值⼀律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统⼀处理;同时,加法和减法也可以统⼀处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是
相同的,不需要额外的硬件电路。

(2)大小端字节序和字节序判断

首先我们来了解什么是大小端字节序
在这里插入图片描述
大端(存储)模式:
是指数据的低位字节内容保存在内存的高地址处,而数据的高位字节内容,保存在内存的低地址处。
小端(存储)模式:
是指数据的低位字节内容保存在内存的低地址处,而数据的高位字节内容,保存在内存的高地址处。
上述概念需要记住,方便分辨大小端。

练习1

请编写一个程序判断当前系统是大端还是小端(百度笔试题)

思路: 可以给定一个变量a为1,如果是小端的话读取一个字节的话得到1,如果是大端的话就得到0

配着下图方便理解:
在这里插入图片描述代码实现:
在这里插入图片描述

练习2

请判断下面这串代码的输出结果:
在这里插入图片描述
解读:
在这里插入图片描述
注意这里因为给定的abc均为char类型的,但是%d是要打印整数的,所以这里就会发生整形提升

练习3

判断下面代码的输出结果:
在这里插入图片描述
解读;
在这里插入图片描述

练习4

判断下面代码的输出结果:
在这里插入图片描述
错误思路:

在这里插入图片描述
正确思路;

在这里插入图片描述
正是由于char类型是有取值范围的,并且这还是个轮回,也就是说这里的a在取到-128时,这时候再往后就是127,然后再从127到0,当遇到\0时strlen计算出255

练习5

请判断下列代码输出结果:
在这里插入图片描述
运行结果;
在这里插入图片描述
解读:因为这里的unsigned char 的取值范围为 0~255 ,导致for循环中的i<=255恒成立,就导致了死循环。

练习6

请判断下面代码的输出结果:
在这里插入图片描述
运行结果:

在这里插入图片描述

解读: 因为unsigned int 的取值范围为 0 ~ 42亿+,所以for循环中的i>=0恒成立,也导致了死循环。

练习7

请计算下面代码的输出结果;
在这里插入图片描述
下面我们通过一个图示来理解:
在这里插入图片描述
这里&a取出的是整个数组,然后加一跳过的是整个数组的长度,然后就到了数组的最后,这时候被强转为int*类型,ptr[-1]代表*(ptr-1) 所以这里指针向左移动一个字节就指向了04的位置这个时候解引用访问一个整形,这时候再转化回去就是4,
但注意ptr2这里的a是强转为了int类型,然后加一就是一个字节所以这里的ptr2指向的是00的位置,然后被赋给int*类型的ptr2,这时候解引用就是访问一个整形,就得到了2000000

代码运行结果:

在这里插入图片描述

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

引言

常见的浮点数:3.14159、1E10等,浮点数家族包括: float、double、long double 类型。

(1)浮点数的存储

根据规定浮点数存储满足以下规则

在这里插入图片描述
在这里插入图片描述

举例1:

在这里插入图片描述

举例2:

在这里插入图片描述

这里注意在小数点右面的位数就是2分之一的n次方,依次向后增长,这其实也就导致了浮点数的存储是有局限性的,它在存储一些特殊值的时候精度是会受到限制的
比如在存储3.14的时候,它是只能无限接近这个数,但是不能准确的表示出来

(2)浮点数存的过程

在这里插入图片描述
在这里插入图片描述

比如0.1
在这里插入图片描述
这里就出现了E为负数的情况,但是存放E的位置又只能存放正整数,所以这时候就需要将E的数值进行一个调整

(3)浮点数取的过程

  1. 常规情况:E不全为1不全为0

这时,浮点数就采用下面的规则表示,即指数E的计算值减去127(或1023),得到真实值,再将有效数字M前加上第⼀位的1
比如:0.5的⼆进制形式为0.1,由于规定正数部分必须为1,即将小数点右移1位,则为1.0*2^(-1),其阶码为-1+127(中间值)=126,表示为01111110,而尾数1.0去掉整数部分为0,补齐0到23位
00000000000000000000000,则其⼆进制表示形式为:

0 01111110 00000000000000000000000

  1. E全为0

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

0 00000000 00100000000000000000000

  1. E全为1

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

(4)例题

在这里插入图片描述
代码运行结果:

在这里插入图片描述
首先当我们看到这个结果的时候肯定挺出乎意料的,那么为什么会是这个结果呢,下面我们来分析一下

在这里插入图片描述
这个时候打印出的第二个结果几乎就是0

在这里插入图片描述
如上图所示,这时候以整数形式打印出来的结果就是上图下面这个二进制的十进制
在这里插入图片描述
最后以浮点数形式打印*pFloat自然就是上面这个结果,没什么好解释的。

总结

这期我们主要学习了整数和浮点数在内存中的存储,并且这其中也包括了之前学到过的整形提升,以及没有学过的大小端字节序

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

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

相关文章

【路径规划】粒子群算法、遗传算法、差分进化算法、灰狼优化算法、麻雀优化算法(PSO、GA、DE、GWO、SSA)路径规划

摘要 本文探讨了多种智能优化算法在路径规划中的应用&#xff0c;包括粒子群算法&#xff08;PSO&#xff09;、遗传算法&#xff08;GA&#xff09;、差分进化算法&#xff08;DE&#xff09;、灰狼优化算法&#xff08;GWO&#xff09;和麻雀优化算法&#xff08;SSA&#x…

CSS基础知识05(弹性盒子、布局详解,动画,3D转换,calc)

目录 0、弹性盒子、布局 0.1.弹性盒子的基本概念 0.2.弹性盒子的主轴和交叉轴 0.3.弹性盒子的属性 flex-direction row row-reverse column column-reverse flex-wrap nowrap wrap wrap-reverse flex-dirction和flex-wrap的组合简写模式 justify-content flex-s…

如何搭建一台邮箱服务器,配置满分邮箱

如何搭建一台邮箱服务器,配置满分邮箱 搭建一台个人邮箱服务器听上去非常有技术含量&#xff0c;但只要准备工作充分&#xff0c;并且选择合适的软件&#xff0c;配置满分的邮箱&#xff0c;其实并没有想象中那么困难。在这篇文章中&#xff0c;我们将介绍搭建邮箱服务器的 必备…

DevOps工程技术价值流:打造卓越项目协作的优化宝典

一、引言 解锁项目协作的无限潜力&#xff0c;覆盖全链路实现流畅高效。 在当今瞬息万变的商业环境中&#xff0c;项目协作的效率和效果直接关系到企业的竞争力和市场响应速度。DevOps工程技术价值流中的项目协作优化&#xff0c;不仅是技术层面的革新&#xff0c;更是团队协…

【JAVA毕业设计】基于Vue和SpringBoot的冬奥会科普平台

本文项目编号 T 610 &#xff0c;文末自助获取源码 \color{red}{T610&#xff0c;文末自助获取源码} T610&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状 六、核心代码6.1 查询项目类型6.…

基于的图的异常检测算法OddBall

OddBall异常检测算法出自2010年的论文《OddBall: Spotting Anomalies in Weighted Graphs》&#xff0c;它是一个在加权图(weighted graph)上检测异常点的算法&#xff0c;基本思路为计算每一个点的一度邻域特征&#xff0c;然后在整个图上用这些特征拟合出一个函数&#xff0c…

网络工程师教程第6版(2024年最新版)

网络工程师教程(第6版)由清华大学出版社出版,由工业和信息化部教育与考试中心组编,张永刚、王涛、高振江任主编,具体介绍如下。 相关信息: 出版社: 清华大学出版社 ISBN:9787302669197 内容简介: 本书是工业和信息化部教育与考试中心组织编写的考试用书。本书 根据…

算法复杂度——大O表示法

参考视频&#xff1a;常见的大O表示法有哪些&#xff1f;时间复杂度是什么&#xff1f;_哔哩哔哩_bilibili

Maven maven项目构建的生命周期 Maven安装配置 IDEA 配置 Maven

一&#xff0c;Maven的概述 Maven的作用&#xff1a;专门用于管理和构建Java项目的工具&#xff0c;它的主要功能有&#xff1a; 提供了一套标准化的项目结构提供了一套标准化的构建流程&#xff08;编译&#xff0c;测试&#xff0c;打包&#xff0c;发布……&#xff09;提…

排序算法(基础)大全

一、排序算法的作用&#xff1a; 排序算法的主要作用是将一组数据按照特定的顺序进行排列&#xff0c;使得数据更加有序和有组织。 1. 查找效率&#xff1a;通过将数据进行排序&#xff0c;可以提高查找算法的效率。在有序的数据中&#xff0c;可以使用更加高效的查找算法&…

GraphLLM:基于图的框架,通过大型语言模型处理数据

GraphLLM是一个创新的框架&#xff0c;它允许用户通过一个或多个大型语言模型&#xff08;LLM&#xff09;来处理数据。这个框架不仅提供了一个强大的代理&#xff0c;能够执行网络搜索和运行Python代码&#xff0c;还提供了一套工具来抓取网页数据&#xff0c;并将其重新格式化…

TransFormer--解码器:概括

TransFormer--解码器&#xff1a;概括 假设我们想把英语句子I am good&#xff08;原句&#xff09;翻译成法语句子Je vais bien&#xff08;目标句&#xff09;。首先&#xff0c;将原句I am good送入编码器&#xff0c;使编码器 学习原句&#xff0c;并计算特征值。在前文中&…

3D Gaussian Splatting 代码层理解之Part1

2023 年初,来自法国蔚蓝海岸大学和 德国马克斯普朗克学会的作者发表了一篇题为“用于实时现场渲染的 3D 高斯泼溅”的论文。该论文提出了实时神经渲染的重大进步,超越了NeRF等以往方法的实用性。高斯泼溅不仅减少了延迟,而且达到或超过了 NeRF 的渲染质量,在神经渲染领域掀…

K8s学习笔记之了解k8s的网络模型

文章目录 docker 网络模型容器与容器之间&#xff0c;容器与宿主机之间如何通信容器访问外部网络外部网络访问容器 k8s 网络模型CNIpod 网络配置流程 k8s 热门网络插件介绍Flannel 来源Calico 来源Cilium 来源 k8s 网络插件的工作模式Flannel 的工作模式Calico 的工作模式BGP 和…

探索高效的 Prompt 框架:RBTR 提示框架的奥秘与优势

前言 在当今数字化的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为我们生活和工作中不可或缺的一部分。而 Prompt 作为与 AI 交互的关键工具&#xff0c;其质量直接影响着我们获取信息的准确性和有用性。今天&#xff0c;我们将深入探讨一个通用的 Prompt 框架…

丹摩征文活动 | 深度学习实战:UNet模型的训练与测试详解

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 1、云实例&#xff1a;配置选型与启动1.1 登录注册1.2 配置 SSH 密钥对1.3 创建实例1.4 登录云实例 2、云存储&#xff1a;数据集上传…

# 10_ Python基础到实战一飞冲天(一)--linux基础(十)

10_ Python基础到实战一飞冲天&#xff08;一&#xff09;–linux基础&#xff08;十&#xff09;–软链接硬链接-tar-gzip-bzip2-apt-软件源 一、其他命令-04-文件软链接的演练实现 1、ubuntu 桌面文件如下图&#xff1a; 2、需求&#xff1a;文件软链接的演练&#xff08;演…

Python学习27天

字典 dict{one:1,two:2,three:3} # 遍历1&#xff1a; # 先取出Key for key in dict:# 取出Key对应的valueprint(f"key:{key}---value:{dict[key]}")#遍历2&#xff0c;依次取出value for value in dict.values():print(value)# 遍历3&#xff1a;依次取出key,value …

【Linux】进程的优先级

进程的优先级 一.概念二.修改优先级的方法三.进程切换的大致原理&#xff1a;四.上下文数据的保存位置&#xff1a; 一.概念 cpu资源分配的先后顺序&#xff0c;就是指进程的优先权&#xff08;priority&#xff09;。 优先权高的进程有优先执行权利。配置进程优先权对多任务环…

ubuntu无密码用SCP复制文件到windows

默认情况下,ubuntu使用scp复制文件到windows需要输入密码: scp *.bin dev001@172.16.251.147:~/Desktop/. 为了解决每次复制文件都要输入密码这个问题,需要按如下操作: 1.创建ssh密钥 ssh-keygen -t ed25519 -C "xxx_xxx_xxx@hotmail.com" 2.使用scp复制公钥到w…