C语言中的数据储存规则
写在开头
关于复习的相关内容其实从一开始就列出了大纲,但是迟迟没有开始复习,一方面是因为学校学业却是繁忙,另一方面还是内心对旧知识掌握不熟练需要再学一遍的畏惧和懒惰,但如今,复习必须开始了。今天我从C语言的最开始,数据存储开始讲起,慢慢回忆起尘封的往事---C语言。
C语言数据储存
数据类型的基本介绍
在C语言中,最基本的内置类型是必须要求掌握的。这也非常普遍的应用于我们的代码编写中。他们分别是
-
属于整型:
-
char (unsigned char & signed char)
-
short (unsigned short & signed short)
-
int (unsigned int & signed int)
-
long (unsigned long & signed long)
-
long long
-
-
属于浮点数
-
float
-
double
-
long double
-
-
属于构造类型
-
数组类型
-
结构体类型 struct
-
枚举类型 enum
-
联合类型 union
-
-
指针类型
-
空类型 (void) 通常用在函数的返回类型,函数参数,指针类型等。
整型在内存中的存储
在语言的层面,创建一个变量是在内存中开辟出空间,而开辟多少空间的依据是变量本身的类型。比如int 类型的变量在被分配空间时,会被分配4个字节,也就是32bit 位的空间。那么数据到底在所开辟出来的内存中是如何存储的呢?
原码、反码、补码
计算机中总共有三种对整数的二进制表示方法,分别是原码、反码、补码。
三种表示方法中,都有符号位和数值位两部分组成。符号位0为正,1为负。而数值位略微复杂,需要分为正数和负数两种情况,正数的原反补都相同,负数的三种表示方法均不同。下面介绍一下原码、反码和补码:
原码:直接将数值按照正负数的形式翻译成二进制就可以得到原码。
反码:原码的符号位不变,其他位依次按位取反得到反码。
补码:反码+1得到补码。
对于整型数据,内存中存放的是补码。
因为:在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理 (在CPU中只有加法器,利用补码可以做到加减统一处理);此外,补码和原码的相互转化,运算过程相同,不需要额外的硬件电路。
那我们可以尝试着算一下20 和 -10 在内存中的存储。
但是如果我们在VScode中输入
int main(){int a = 20;int b = -10;return 0;}
并且监视内存,可以发现a、b变量在内存中的显示分别为
a : 0x14 00 00 00b : 0xf6 ff ff ff
它们在内存中显示的是0x前缀,代表是16进制,但是却与我们转化的恰好相反,这是因为大小端存储模式。
大小端模式
大端存储模式:数据的低位保存在内存的高地址中,数据的高位保存在内存的低地址中。
小端存储模式:数据的低位保存在内存的低地址中,数据的高位保存在内存的高地址中。
记忆方法:小->低->低,剩下相反。
为什么存在大小端模式之分:计算机系统以字节作为内存的单位,每个地址对应一个字节。对于位数大于8位 (bit) 的处理器,由于寄存器的宽度大于1字节,那么必然存在着多字节间排列的问题,因此导致了大端存储和小端存储。
常用机器一般采取小端模式。
//判断当前机器字节序列int check_sys(){int i = 1;return (*(char*)&i);}int main(){int ret = cheack_sys();if(ret == 1){printf("小端");}else{printf("大端");}return 0;}
浮点数的存储
浮点数的表示范围在 float.h 中定义。
根据国际标准IEEE754,任何一个二进制浮点数V可以表示成下面的形式:
(-1)^S * M * 2^E// (-1)^S 表示符号位。当S=0,V为正数;S=1,V为负数// M代表有效数字,大于等于1,小于2。//所以M只可能写成1.xxxxxxx的形式,计算机会默认略去小数点前面的1,只会保存小数位,这样可以节省1为有效数字。// 2^E 表示指数位。E位一个无符号整数。但是科学计数法中指数位是可以出现负值的。所以IEEE754规定,存入内存时E的真实值必须加上中间数,32位浮点数,中间数位127,64位浮点数,中间数为1023.// 比如E = 10,保存成32位浮点数时,保存为10+127 = 137// 就是带符号位的二进制的科学计数法
IEEE 754规定:
32位的浮点数,最高位的1位是符号位S,紧接着的8位是指数E,剩下的23位为有效数字M。
64位的浮点数,最高位的1位是符号位S,紧接着11位是指数E,剩下的52位为有效数字M。

指数E可以细分为三种情况。
-
二进制E不全为0或者不全为1
浮点数采用下面规则表示,E的计算值减去中间数(127 或者 1023),得到真实值。M加上第一位的1,得到真实的有效数字。
举例:
-
二进制E全为0 (极限接近0的小数)
浮点数的指数位E就等于 1 - 中间值,即为真实值。
M不再加上1,而是还原为0.xxxxxx的小数,用于表示极限接近于0的很小的数字。
-
二进制E全为1 (正负∞)
正负取决于符号位
数据存储小节完。
相关文章:
C语言中的数据储存规则
写在开头 关于复习的相关内容其实从一开始就列出了大纲,但是迟迟没有开始复习,一方面是因为学校学业却是繁忙,另一方面还是内心对旧知识掌握不熟练需要再学一遍的畏惧和懒惰,但如今,复习必须开始了。今天我从C语言的最…...
Android kotlin实战之协程suspend详解与使用
前言 Kotlin 是一门仅在标准库中提供最基本底层 API 以便各种其他库能够利用协程的语言。与许多其他具有类似功能的语言不同,async 与 await 在 Kotlin 中并不是关键字,甚至都不是标准库的一部分。此外,Kotlin 的 挂起函数 概念为异步操作提供…...
Pycharm中的Virtualenv Environment、Conda Environment
版本一 Conda Environment该不该选? 先说结论,该选,而且还是正解。前提是你打算"用Anaconda来管理各种Python环境,同时管理Python下面的各种包"。 选了Conda Environment意味着什么? 意味着你以后如果要装新的包的话…...
C++容器介绍:vector
目录vector简介使用方法1.头文件2.vector声明及初始化3.vector基本操作(1). 容量(2). 修改(3)迭代器(4)元素的访问(5)算法vector 简介 vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vecto…...
抗锯齿和走样(笔记)
Artifacts(瑕疵): 比如人眼采样频率跟不上陀螺的旋转速度,这时就有可能看到陀螺在反方向旋转怎么做抗锯齿(滤波): 在采样之前先进行一个模糊操作,可以降低锯齿的明显程度 通过傅里叶…...
线程池的使用——线程池的创建方式
线程池的使用——创建线程线程池的创建线程池的创建方式Executors.newFixedThreadPool:Executors.newCachedThreadPool:Executors.newSingleThreadExecutor:Executors.newScheduledThreadPool:Executors.newSingleThreadScheduled…...
代码随想录算法训练营day47 |动态规划 198打家劫舍 213打家劫舍II 337打家劫舍III
day47198.打家劫舍1.确定dp数组(dp table)以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组213.打家劫舍II情况一:考虑不包含首尾元素情况二:考虑包含首元素,不包含尾元素情况三&#x…...
项目设计模式和规范
1、责任链模式 自己的理解:避免发生方与接收方解耦 优点:①降低发送方与接收方的耦合 ②简化他们对象 ③方便扩展新增 处理者 缺点:①不方便排错 ②性能问题,且使用不当容易搞出死循环 应用场景:拦截器 Interceptor和过滤器 filter:符合模式的进行拦截或者过滤到,然…...
无线WiFi安全渗透与攻防(一)之无线安全环境搭建
无线安全环境搭建 1.802.11标准 (1).概念 802.11标准是1997年IEEE最初制定的一个WLAN标准,工作在2.4GHz开放频段,支持1Mbit/s和2Mbit/s的数据传输速率,定义了物理层和MAC层规范,允许无线局域网及无线设备…...
【matplotlib】可视化解决方案——如何解决matplotlib中文乱码问题
问题概述 Matplotlib 默认不支持中文字体,这是因为 matplotlib 只支持 ASCII 字符,但是国人使用 matplotlib 肯定需要中文标注。如下图所示,当不对 Matplotlib 进行设置,而直接使用中文时,绘制的图像会出现中文乱码。…...
JAVA开发中GC日志打印简单通用的配置详解
如何配置一个完美的JVM日志打印信息 打印内容 打印基本的GC信息 打印对象分布情况 GC后打印堆数据 打印STW时间 打印safepoint信息 打印Reference处理信息 综上所述,最终的参数如下: 还有哪些问题呢?是不是有文件输出更好? 打印日…...
十进制的小数如何转二进制?二进制表示的小数如何转十进制?
😄 基础不牢,地动山摇~ 补补基础~ 文章目录 1、十进制的小数转二进制?2、二进制表示的小数转十进制?3、做道coding题巩固下:1、十进制的小数转二进制? 整数部分: 用普通的二进制表示即可。小数部分: 首先,将小数部分乘以2,取出整数部分作为二进制表示的第1位;然后…...
klipper使用webcam设置多个摄像头方式
一、前言 使用klipper设置多个摄像头,折腾了好些天,网上资料很少,这里写一个帖子记录一下 二、环境 参考链接:https://www.cnblogs.com/sjqlwy/p/klipper_webcam.html 我的klipper安装在香橙派上面,系统是debian&a…...
风力发电机组浪涌保护器安全防护方案
风机的庞大与危险高空作业注定了其在基建和维护中不易操作,风机设备的主电源、过程控制、网络与通讯、现场设备需要高等级的防雷浪涌保护器冲击保护,提高系统及设备的可靠性和可用性。风电场的主要发电设备风力发电机组“大风车”是风电场的主要发电设备…...
【剑指offer】JZ7 重建二叉树、JZ9 用两个栈实现队列
\描述: 给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。 思路: 题上给了我们前序遍历(根 …...
ElasticSearch - SpringBoot整合ES之查询所有 match_all
文章目录1. 数据准备2. 全量查询 match_all3. 使用 boost 参数更改 _score官方文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/index.html权威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/structured-search…...
详谈IIC
前言 在嵌入式底层系统中,常见的通讯方式,串口,IIC,SPI,IIS等,一般IIC,SPI,IIS更多的采取IO模拟,其余CAN,UART均是硬件设计直接支持,而IIC主要用于多数传感器数据的读写,…...
【Autoware】采集实验数据bag包并仿真运行
文章目录1. 官方demo包2. 控制底层地图采集3. 感知定位4. 规划控制5. 仿真或实车运行1. 官方demo包 wget http://db3.ertl.jp/autoware/sample_data/sample_moriyama_data.tar.gz wget http://db3.ertl.jp/autoware/sample_data/sample_moriyama_150324.tar.gz官方示例包的网上…...
名创优品怎么把创意做成生意?
最近,“主”无处不在,从让“依托答辩”梗火出圈的动画《三体》,到备受好评的电视剧《三体》,再到仍在刷新高票房成绩的《流浪地球2》。作为近些年来中国为数不多的爆款IP制造者,刘慈欣在《三体》中提出了一个著名的理论…...
springboot原项目配置文件迁移至nacos
目录一、配置文件迁移nacos1.安装nacos2.添加依赖3.改造service-product3.改造server-gateway一、配置文件迁移nacos 1.安装nacos 1,如果之前安装过nacos,nacos数据保存至mysql,先删除已安装的nacos,再安装 docker stop nacos …...
基于多平台行为数据构建AI Agent深度用户画像:Know Your Owner项目解析
1. 项目概述:从“你是谁”到“我懂你”的智能跨越在AI助手日益普及的今天,我们面临着一个核心矛盾:用户期望获得高度个性化的服务,而AI助手在初次接触时却对用户一无所知。传统的解决方案,比如让用户填写冗长的问卷&am…...
语言启蒙到底要不要背单词
语言启蒙阶段到底要不要背单词?我更愿意把这个问题换一种问法:这些词是不是能和声音、图像、语境连起来,并且隔几天还能回来一次。 如果只是拿一张词表硬记,入门用户很容易觉得枯燥。可如果完全不接触词汇,后面的听读…...
ClawSuite:模块化网络安全工具集在渗透测试中的实战应用
1. 项目概述:ClawSuite,一个被低估的网络安全工具集如果你在网络安全领域摸爬滚打了一段时间,尤其是在渗透测试或者红队评估的圈子里,你大概率听说过或者用过像 Metasploit、Nmap、Burp Suite 这些耳熟能详的“瑞士军刀”。但今天…...
硬件相关项目内容介绍(硬件咱们也有相关技术支持内容哦)
硬件相关项目内容介绍(硬件咱们也有相关技术支持内容哦) 硬件咱们也有相关技术支持内容哦。 主要看大家喜欢什么,硬件内容咱们会不定期更新分享,大家要是喜欢,后续就安排上实物实操。也虚心听取大家建议,不…...
SRWE终极指南:5分钟学会游戏窗口分辨率自定义技巧
SRWE终极指南:5分钟学会游戏窗口分辨率自定义技巧 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 想要在游戏中获得超高清截图,却受限于系统预设的分辨率?想要在窗口模式下享…...
LeetCode 岛屿数量题解
LeetCode 岛屿数量题解 题目描述 给定一个二维网格地图 1(陆地)和 0(水),计算岛屿的数量。 示例: 输入:grid [ ["1","1","1","1","0"], …...
避坑指南:SciencePlots安装后样式不生效?手把手教你排查Matplotlib的stylelib路径问题
科学绘图样式失效?彻底解决Matplotlib样式库路径配置难题 当你第一次尝试用SciencePlats的science样式美化科研图表时,却发现Python报出KeyError: science is not a valid style的错误提示——这种挫败感我深有体会。作为每天与数据可视化打交道的从业者…...
信息安全工程师-网络安全风险评估(上篇):框架、流程与量化基础
一、引言 (一)核心定位与定义 网络安全风险评估是信息安全管理体系的核心方法论,在软考信息安全工程师考试中属于信息安全管理模块的高频考点,占比约 8-10 分。其标准定义为:依据 GB/T 20984-2007《信息安全技术 信息…...
北京AGG聚砂吸声板哪家性价比高
在选择AGG聚砂吸声板时,“性价比”往往不只是看价格,而是综合考量声学性能、施工服务、材料稳定性和后期维护的平衡。北京市场上的供应商不少,但真正能长期稳定输出成熟产品的,需要从几个实际角度去判断。首先,要优先看…...
开源高级提示词数据库:一键部署,解锁AI生产力
1. 项目概述:一个开箱即用的高级提示词数据库如果你和我一样,经常在ChatGPT、Claude或者Midjourney这类AI工具里折腾,那你肯定明白一个道理:好的提示词(Prompt)就是生产力。但问题来了,那些真正…...
