整数、浮点数的内存中存储

引言

两种数据在C语言中都十分的重要,很有必要都掌握清楚。

一、整数

以我们常见的数字进制来说,生活中普遍为十进制的数字,遇十进一,但是计算机由于其底层逻辑的影响,采取了二进制的方式存储数据。常用的编译器还会采取十六进制来简化显示的界面。

1.十进制向二进制的转换

对于整数来说,都可以精确的化为二进制所表示数字。

有一个简单的方法就是对十进制下的数字采取除2取余数的方式,以数字114为例:
114除2得57余下0;

57除2得28余1;

28除2得14余0;

14 除 2 得 7 余0;

7除2 得 3 余 1;

3 除 2 得1 余 1 ;

1 除 2 得 0 余 1 ; 此时终于结束,把所得余数按先后顺序连接,得到1110010;

而114的二进制恰巧为此数,

想知道为什么的可以尝试将114表示为二的多少次方的相加,对等式两边进行除2操作。

2.计算机中的正数

已知计算机中存储的是二进制的数字,对于正数而言,它们在内存中就是二进制的表示形式,

前面的要补上0,到它所有的位数。

3.计算机中的零

全为零:

0000 0000 0000 0000 0000 0000 0000 0000 0000

4.计算机中的负数

首先补充点计算机的处理器的知识:

  • 硬件需求:加法电路的设计相对简单(可通过“异或门”实现本位和、“与门”实现进位,如半加器/全加器),而减法电路需要额外的借位处理逻辑,会增加硬件复杂度与成本。早期计算机资源有限,复用加法电路处理减法是更优选择。

  • 减法转加法的可行性:通过补码机制,减法可转换为加法运算(即 A−B=A+(−B))。只需将减数转换为其补码(负数的补码表示),再通过加法器计算,即可得到正确结果。这种方式无需额外减法电路,大幅简化了硬件设计。

重点:发明的原码、反码和补码完善了负数的储存

首先,假设我们处理的是32个比特长度的 int 类型数据,一个比特对于一个二进制位,那么一共有32位,把这32位分成两类,从左往右的第一位为符号位,0 代表正数,1代表负数。

剩下的31 为存储相关的信息:

1.原码 把负数的绝对值转换为二进制,之后在前面加上符号位就得到了原码。

此处以 - 114 举例 就有10000000 00000000 00000000 01110010;

2.反码 符号位保持不变,其余按位取反,

得 11111111 11111111 11111111 10001101;

3.补码:反码直接在最后加1

得 11111111 11111111 11111111 1001110;

补充运算小技巧:补码进行符号位不变,取反加1可以得到原码。

最重要的一点来了,计算机中的负数全部存储的是补码,且正数和 0 原码就是补码、反码

当正数与负数做运算时,直接让他们的补码相加,得到的就是结果,

例如正数114与 -114 相加

两者分别为 00000000 00000000 00000000 01110010

11111111 11111111 11111111 1001110

易得相加后结果为 00000000000000000000000000000000,也就是0

由此可见,原本的负数可以用补码来表示,并且完美搭配处理器的加法功能。

5.大小端字节序

介绍

内存存储数据时,采取的是以字节为单位的存发

对于四个字节的整型,那它的数字的二进制形式就被分成了四段

对二进制所表示的大小从高到低,分为高位字节内容和低位字节内容,原理上是用的二进制,但是在 vs2026 里面的显示形式为16进制,这是为了人类看数据的时候更加简洁,而不是一长串的0101.

当低位字节内容在低地址。高位字节内容在高地址,这个叫小端字节序

反之,低位高,高位低,这样叫大端字节序。

比如我在vs2026编译器中建立一个值为 0x11223344 的整型变量

明显可以看出,低地址存的是低位字节的数据,高地址存的是高位字节的数据

即vs2026环境下用的是 小端字节序

影响

大小端字节序影响的是每位地址所对应的值,就以变量 int a = 0x11223344举例,

在小端字节序下,&a 对应的是 a 的后面8个二进制位的值,也对应着十六进制下的44

在大端字节序下,&a 对应的是 十六进制下的11。

这个迥然不同的差异,可以被拿来出各种各样的题型,也能造成 bug ,考验你把char (unsigned)类型的数据赋值了a的地址的强制char *类型转换的解引用,所得到 char数据中实际的值是什么,还可以替换 char 为 short,变换无穷,但本质就是那点知识

判断

请你写一个简单的大小端判断的代码,检验你的 IDE 所处的环境。

主要是利用一个内存占用在两个字节以上的变量,并在两个字节中保证好不是同一个值,

再利用char * 以及 char 类型来得到变量地址所对的值是多少,最终判断出大小端。

二、浮点数

浮点数不遵循上述的原码、反码和补码的规则,有自己一套的新存储方式

且不同类型的浮点数的存储方式略有不同

大体上采取了符号位,指数位,有效数字位:

相信我们都熟练掌握了十进制的科学计数法,而二进制的科学计数法跟浮点数有着莫大的关系。

以2为底,非零的浮点数可以表示为可判断正负的1打头的小数点后接多少多少有效数字的再乘上以二为底的多少次方的一个数,如下

对应到float 类型的变量,前面的 s 占一位,中间的指数部分占8位,后面的有效数字位占23位

注意事项

1.M的小数总处于1~2 的左闭右开区间,因此把小数部分保留,整数部分1舍去,这样能多保存一位数字

2.E位部分是无符号整型,但是实际中2的指数可以为负数,因此采取对负数加127的操作,

未完待续

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

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

相关文章

AlexNet 迁移学习实战:CIFAR-10 图像分类实验 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

element-ui table高度自适应实现分享

文章目录概要实现思路具体代码自适应封装mixins代码使用示例组件代码附加分享概要 在后台管理系统开发过程中,通常我们的布局都是如下图。这里面比较头疼的问题就是右侧这个table的高度自适应问题,接下来我将分享如何简单实现表格高度自适应。 实现思…

Linux Rootkit 手法解析(下):深入内核态的“隐形”攻防战

在上篇文章中,我们剖析了用户态Rootkit的种种手法,它们如同在操作系统的“外部广场”上进行伪装和欺骗。尽管手段多样,但其隐蔽性终究受限于用户空间的环境,细心的守护者总能通过多种方法发现端倪。 但此刻,我们将要推…

Linux Rootkit 手法解析(上):用户态的“隐身术”与检测思路

Linux Rootkit是一类针对Linux操作系统设计的恶意工具集,它通过多种方式隐藏自身和攻击活动,使得攻击者能够绕过安全防御机制,在受害主机上非法维持控制权限,因此常被喻为黑客的“隐身斗篷”。 面对这种高级威胁,了解…

TikTok矩阵工具实操指南:分主体适配与落地流程拆解

图片来源:TK云大师摘要:TikTok矩阵运营的核心竞争力,在于工具与业务需求的精准适配。对于号商、品牌方、跨境电商而言,工具选型失误会直接导致运营效率低下、账号风险攀升。本文聚焦三类主体的核心需求,拆解可直接复用…

人群仿真软件:Pathfinder_(3).人群建模与行为设置

人群建模与行为设置 在人群仿真软件中,人群建模与行为设置是至关重要的步骤,它直接影响到仿真的准确性和可靠性。本节将详细介绍如何在Pathfinder中进行人群建模和行为设置,包括人群属性的定义、行为模式的选择和自定义行为的创建。 1. 人群…

人群仿真软件:Pathfinder_(2).Pathfinder的基本功能与操作

Pathfinder的基本功能与操作 1. 软件界面介绍 1.1 主界面布局 Pathfinder 的主界面布局清晰,主要分为以下几个部分: 菜单栏:包含文件、编辑、视图、工具等常规操作。 工具栏:提供常用的工具按钮,如新建、打开、保存…

DeepSeek+Cursor封神指南:AI驱动编码全流程实战(含代码精解)

目录标题 一、工具选型:为什么是DeepSeekCursor?二、环境搭建:3步接入满血版DeepSeek2.1 前置准备2.2 配置Cursor与DeepSeek2.3 进阶配置(优化性能与体验) 三、核心操作:CursorDeepSeek快捷用法四、实战案例…

FastAPI系列(02):第一个示例

本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/19503695python环境 python pycharm FastAPI安装 pip install fastapi 安装后就包好了pydantic、starlette 另外,FastAPI 推荐使用 uvicorn 来运行…

心愈语伴:DeepSeek+Qwen2.5打造专属情感聊天工具全教程

目录标题 一、工具核心架构与技术选型1.1 核心设计逻辑1.2 技术栈清单 二、前置准备:环境搭建与资源获取2.1 安装基础依赖2.2 获取DeepSeek API Token2.3 本地部署Qwen2.5-3B模型 三、核心开发:从接口封装到情感协同3.1 封装DeepSeek情感分析接口3.2 封装…

2026年会议纪要工具top9_工具_测评_ASR

2024 年高效语音处理方案推荐根据 IDC《2023 年中国人工智能语音转文字应用市场白皮书》,2023 年中国语音转文字市场规模达 87.6 亿元,同比增长 34.2%,企业级用户对实时转写、多语言支持的需求同比提升 41%。从微观来看,传统会议记…

Vue3+Cesium教程(38)--动态雾浓度、颜色

本学习系列以Cesium Vue3 Typescriptelementplus作为主要技术栈,后续会循序渐进,持续探索Cesium的高级功能,敬请期待。欢迎关注威信公众号“webgis学习”。详情请查阅原文 Vue3Cesium教程(38)--动态雾浓度、颜色https://mp.weixin.qq.com/s…

一天一个Python库:requests - 简单好用的HTTP请求库

requests - 简单好用的HTTP请求库 一、什么是requests? requests 是一个用于发送HTTP请求的 Python 库。 它可以帮助你:轻松发送GET、POST、PUT、DELETE等请求 处理Cookie、会话等复杂性 自动解压缩内容 处理国际化域…

Vue3+Cesium教程(37)--下雪啦!动态设置降雪效果

本学习系列以Cesium Vue3 Typescriptelementplus作为主要技术栈,后续会循序渐进,持续探索Cesium的高级功能,敬请期待。详情请查阅原文 Vue3Cesium教程(37)--下雪啦!动态设置降雪效果https://mp.weixin.qq.com/s/5RFjzPKzkVLy_7h…

星瞳OpenMV官方机械臂教程|从零开始:Robot Arm机械臂快速上手

欢迎观看OpenMV官方机械臂的第一期教程!本期将带你快速了解机械臂并掌握基础操作。 看完后,你就能开始创建自己的专属项目啦! OpenMV官方机械臂教程|从零开始快速上手*具体教程和源码可在星瞳科技OpenMV官网[OpenMV.cc]查看哦! …

【docker部署milvus向量库和可视化界面attu】

docker compose部署milvus和attu 一、配置docker镜像源1.配置镜像源2.重启Docker服务3.验证是否生效 二、docker部署milvus和可视化界面attu1.创建目录结构2.创建docker-compose.yml文件 4.通过docker compose命令快捷管理容器 一、配置docker镜像源 1.配置镜像源 Docker的配…

PX4中关于GPS质量检测和相关控制参数

一、PX4关于GPS质量检测的相关参数 PX4官方参数树:参数参照表 | PX4 Guide (main) 1、EKF2_GPS_CHECK (INT32): Integer bitmask controlling GPS checks Comment: Each threshold value is defined by the parameter indicated next to the check. …

PX4导航遇到GPS数据丢失的处理和相关控制参数

PX4导航时GPS数据丢失的处理 1. GPS数据丢失的检测与驱动层处理 PX4的检测:GPS驱动通过poll()系统调用轮询接收数据,当超过1秒无有效数据时标记为不健康(_healthyfalse)重连:驱动会关闭并重启串口,在参数中…

Java小白求职者面试:从Spring Boot到微服务架构设计的问答解析

场景描述 超好吃是一位初入职场的Java程序员,今天他来到一家互联网大厂,面试官是一位严肃且经验丰富的技术专家。这次面试以内容社区与UGC为业务场景,展开了关于Spring Boot、微服务架构设计和安全框架的技术问答。第一轮:基础知识…

day162—递归—买卖股票的最佳时机Ⅱ(LeetCode-122)

题目描述给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。然而,你可以在 同一天 多次买卖该股票,但要确保你持有的股票不…