搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
繁依Fanyi0
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
Stable Diffusion 2.0 上线,却痛失黄暴图片生成能力
2
AI辅写的疑似度:多少才算正常?_aigc总体疑似度多少正常
3
4种小众的能力,帮你更好地适应未来
4
PS学习笔记(一):基础知识_ps知识点汇总
5
java 平台无关性_Java的平台无关性
6
Win32k(2) 报文驱动的通信机制
7
Linux 终于有人把CPU上下文切换说清楚了_上下文切换时会删除工作内存吗
8
Python编程思想【系列文章】_python编程思维
9
maven导入jar包步骤_maven安装工程如何导入javaee的jar
10
线程切换&线程数设置_线程切换与线程切换
当前位置:
article
> 正文
【C语言】数据在内存中的存储(包含大小端字节序问题)~
作者:繁依Fanyi0 | 2024-03-20 09:12:28
赞
踩
【C语言】数据在内存中的存储(包含大小端字节序问题)~
一、前言
我们在刚开始学习C语言的时候,就接触到了很多
数据的不同类型
。
我们也知道,数据是存储在一块内存空间的,且我们只知道数据的类型决定着,该数据在内存中所占内存空间的大小,
且超过一个字节的数据在内存中存储的时候,就有(以字节为单位)存储顺序的问题。
可我们
更应该知道,数据不仅仅只是存储到指定的空间就完事了,而是不同类型的数据有它相对应的存储原则的。
这篇文章就是
讲解不同类型的数据是在内容中的存储方式+大小端字节序
。
(本篇文章只对整型家族与浮点型家族对其在内存中的布局进行详解)待更~
二、整型数据在内存的存储
1.如何存储整型数据?
整数的二进制表示形式有三种:原码
(整数数据按照二进制的转换后,得到的就是原码)
、反码、补码。
而整数在内存中是以补码的形式存储的。
这三种表示形式都有符号位与数值位,
符号位用‘1’表示负,用‘0’表示正,而符号位是数值位的最高一位作为符号位
。
若整数类型是无符号整型,则会把最高位也看成数值位,而把数据默认为正数。且它的反码与补码都等于原码
当是有符号的整数时,整数为正时,原码、反码、补码相同。
为负的时候,则需要按照下面的运算法则得到补码。
原码(整数数据按照二进制的转换后,得到的就是原码);反码(原码,保持符号位不变,其余位按位取反(~)得到反码);补码(反码 + 1得到补码)。
补:补码按照同样的运算法则,可以得到原码。
2.补码的意义是什么?
补码可以让在内存中存储的整数数据,符号位与数值位统一处理。
CPU只有加法器,无论进行加法还是减法,两数补码直接相加即可
原码转换为补码;补码转换原码,运算法则相同。(符号位不变,数值位按位取反,后+1)
3.如何读取整型数据?
整型数据的读取较为简单,怎么存的怎么读出来就行
首先,判断该数据类型是否是整型类型
其次,判断该整数是signed的整型类型还是unsigned整型类型
若为,若为signed的整型类型,且存的整数是负数,需紧记原反补的转换!!!
三、浮点型数据在内存中的存储
1.如何存储浮点型数据(伏笔)
(-1)^S * M * 2^E
任何一个二进制的浮点型数据,都可以用上面的科学计数法表达式来表示;
S:用于决定该浮点型数据的正负号,S=0时,数据的正负性为正,S=1时,数据的正负性为负。
M:是一个>1 且 <2的有效数字(我们联想到十进制的科学计数法的有效数字也就能理解到这点)。
E:是一个指数
S M E在内存中的布局
(下面的的讲解都将以float类型展开,也就是4字节的)
2.如何存储浮点型数据(开始)
上面只是介绍了一些有关存储浮点型数据的相关的概念,可这些不足以让我们深入理解到浮点型到底在内存中是如何存储的。
存储S数据:
很简单,数据是正的,S位上就是0,反之,位1。
存储M数据:
因为我们都知道M都是一个
>1 且 <2
的有效数字;
为了能让内存得到更高效的利用,在M中的数据存储到内存的时候,都会将M小数点前面的1省去,只保留小数部分。
而等我们读取数据的时候,会将M的1再补上去,这样就更高效的利用了一个比特位。
存储E数据:
E是一个无符号整型数据,可是浮点型数据是有正负性之分的,那如何去解决这一难题呢?
我们在存储E的数据的时候会加上一个中间值,进行转换,存储到内存中。
读取的时候,也会把得到的数据减去这个中间值。
中间值是什么?
用8比特位存储E数据的时候,其中间值是127(255/2)
用11比特位存储E数据的时候,其中间值是1023(2047/2)
(
这里我将举两个例子
)
3.如何读取浮点型数据(结尾)
只要理解了如何存储浮点型数据,那读取数据就迎刃而解(怎么走的,就怎么回来),但是也有一些特殊的地方,比如对E数据的读取。
存储E数据的比特位全为0的时候:(这是一个无限小的数字)
这时,浮点数的指数E等于1-127(或者1-1023)即为真实值,有效数字M不再加上第⼀位的1,⽽是还原为0.xxxxxx的⼩数。这样做是为了表⽰±0,以及接近于0的很⼩的数字
存储E数据的比特位全为1的时候:(这是一个无限大的数字)
这时,如果有效数字M全为0,表⽰±⽆穷⼤(正负取决于符号位s);
E不全为0或不全为1
怎么存E的数据,就怎么读取就行。
四、大小端字节序
1.概念的引出
2.大小端字节序的概念
小端字节序存储:
高位的数据存储的高地址处;低位的数据存储到低地址处
大端字节序存储:
高位的数据存储的低地址处;低位的数据存储到高地址处
3.如何判断当前机器的字节序是哪种类型
不同平台的是大端字节序的存储,还是小端字节序存储是不一样的,我们能做的就是通过一定的手段获得机器是大端字节序存储,还是小端字节序存储。
指针求解:
联合体求解:
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/272253
推荐阅读
article
颠覆好莱坞
,
Sora
最强竞对
LTX
Studio
发布
,
普通人也能手搓电影_
ltx
sudio
...
当AI填补了技术的沟渠后
,
实际上比拼的就是创意
,
AI来辅助呈现你的想法。有人说
,
AI会砸了影视从业者的饭碗
,
但不可否认的...
赞
踩
article
Python
实践:基于
Matplotlib
实现某
产品
全年
销量
数据
可视化
...
Python
实现某
产品
全年
销量
数据多种样式
可视化
,主要是应用了python的matplotlib库进行绘制各种图表。Py...
赞
踩
article
ClickHouse
(六)知识点补漏
_
clickhoue
怎么查看
索引
在
创建
...
1、二级
索引
目前
在
ClikHouse的官网上二级
索引
的功能
在
v20.1.2.4之前是被标注为实验性,
在
这个版本之后默认...
赞
踩
article
主成分分析(
PCA
)
原理
详解-
特征值
分解
&&
SVD
分解
_
pca
的
原理
是svd吗...
1.
PCA
的概念2.协方差矩阵和散度矩阵3.
特征值
分解
矩阵3.1
特征值
与特征向量3.2
特征值
分解
矩阵
特征值
分解
的例子4....
赞
踩
article
【
MySQL
(十六)】更
新
丢失 解决方案_
mysql
跟
新
时
tinyint
跟
新
失败...
一个比较见的业务场景,先从表里读一条数据的一列,然后在内存中计算该列的
新
值,最后再update
新
值到表里:select ...
赞
踩
article
SpringBoot项目启动Disconnected
from
the
target
VM_spri...
新建的SpringBoot项目启动Disconnected
from
the
target
VM,
addre
ss: '...
赞
踩
article
HttpServletRequest
.
getHeader
时获取
不到
value
值_
request
.g...
由于很久没弄过前端了,最近做的有个项目比较坑,前端通过heards 传入token等验证数据,但是通过geHeader方...
赞
踩
article
Android
10编译报错整理_
ninja
failed
with
:
exit
status
13...
编译
Android
10遇到以下不同报错,没有给出明显的错误信息,最后验证出是电脑内存不足导致编译被杀掉,增大电脑内存和...
赞
踩
article
怎样利用
AI
大模型,
辅助
研发
管理
与
效能
提升?_ai
开发
提效的效果
度量
...
研发
管理
者可通过定期的分析报告来
管理
研发
效能
,从趋势分布对比的角度来分析
研发
效率和质量等指标,通过下钻分析来挖掘问题根源...
赞
踩
article
开机
自启动
程序
关闭
方法_
电脑
非常
卡
,
总有
软件
偷偷
自启动
?学会这1招
,
永久
关闭
它们!......
小编有一个朋友
,
前段子发微信问我
,
说他的
电脑
非常
卡
,
重装
电脑
后
,
会好转许多
,
非常
流畅
,
但是过了几天又卡了。我问了他的
电脑
...
赞
踩
article
Qt-
QPainter
drawText
方法
不同
重载之间
的
区别...
QPainter
类
的
drawText
方法
有如下重载,可以分成两类,一类是提供点坐标绘制文本,一类是提供方框绘制文本。区别...
赞
踩
article
如何
使用
My
SQL
数据库
(2)
操作
数据库
(
SQL
语句、
数据库
的基本
操作
:
创建
,查看,选中,删除、My...
如何
使用
My
SQL
数据库
(2)
操作
数据库
(
SQL
语句、
数据库
的基本
操作
:
创建
,查看,选中,删除、
My
SQL
中支持的数据类...
赞
踩
article
使用
ffmpeg
提取
视频
关键帧
_
利用
ffmpeg
提取
视频
中的任意
关键帧
...
需要安装
ffmpeg
-python 库,代码见RapidAI/keyframe
_
extractor: To extra...
赞
踩
article
计算机
丢失
tinyxml
.
dll
该
怎么办
,QQ说没有找到
tinyxml
.
dll
,因此这个
应用程序
未能...
朋友,你先清理一下:【IE缓存和网页垃圾】!这是你的电脑误删了系统文件,或系统文件被顽固木马破坏!(答案原创,原作者:力...
赞
踩
article
C#
版本的
按键精灵
,全局
键盘
鼠标
事件
_
c#
按键精灵
...
【代码】
C#
版本的
按键精灵
,全局
键盘
鼠标
事件。
_
c#
按键精灵
c#
按键精灵
...
赞
踩
article
MacOS
配置
Python
环境_
mac
配置
python
环境...
MacOS
配置
Python
环境_
mac
配置
python
环境
mac
配置
python
环境 ...
赞
踩
article
Mac
Python
使用
pygame
监听
键盘
无
响应
_
pygame
键盘
监听
事件字母按键无
响应
。...
这个问题困扰我很久,记录下俩希望帮助以后开发遇到同样问题的伙计。 例如需要执行的文件是,test.py 只需在终端执行p...
赞
踩
article
通过编程做特别
效果
的
个性“
微信
”
二维码
(
思路)_
wpf
矢量
二维码
...
注,这里只说编程思路,没有源代码。先看
效果
:图1 灯笼
效果
的
二维码
从上图可以看到,其特征是:
(
1)整个外形为灯笼;
(
2)...
赞
踩
article
cf虚拟
服务器
设置方法,【
WGCF
】
连接
CF
WARP
为
服务器
添加
IPv4
/
IPv6
网络...
WARP
是CloudFlare提供的一项基于WireGuard的网络流量安全及加速服务,能够让你通过
连接
到CloudFl...
赞
踩
article
网络
工程师
练习题3...
212.78.170.166/27的前27位为
网络
前缀,即前24位不变,第25位为1,26位为0,27位为1,其余为0,...
赞
踩
相关标签
AIGC
信息可视化
Python
matplotlib库
big data
clickhouse
pca降维
java
spring
开发语言
android
编译器
人工智能
数据挖掘
大数据
开机自启动程序关闭方法
qt
qpainter
drawText
绘制
数据库
mysql
增删改查
音视频