数据在计算机内的表示和存储

目录

一.C语言中强制类型转换

二.数据的存储方式

1.大小端模式

2.边界对齐


一.C语言中强制类型转换

1.无符号数与有符号数:不改变数据内容,只是改变了计算机的解释方式

例如下图,短整型转为无符号短整型再赋值给y,y=x=1110 1111 0001 1111,只是计算机在解析真值时会以无符号数的规则进行解析。

2.将长整型变短整型:则将高位截断,保留低位。

例如下图,a用16进制表示为0x000286a1,强制类型转换后为0x86a1,即c=0x86a1,计算机用16bit补码的方式将其解析为真值,即-31071。b转换为d同理:

3.短整数变长整数:符号扩展

① 有符号数

由于定点整数的小数点在数的末尾,所以,若定点整数的补码是负数,则在符号位和原有的数值位之间填充“1”(正数则填充“0”),用这样的方式得到的补码,解析为真值,值是不变的。

例如下图,短整型x转换为长整型n,由于x是负数,所以在符号位后填充"1"

再看n,将短整型强制转换为无符号短整型,再赋值给n。这时计算机会把x的二进制值赋值给n,再以无符号数的规则解析出真值。

② 无符号数:若原数字是无符号数,扩展后高位用0填充。

例如下图,将无符号短整型n转换为无符号整型p,高位填充"0"即可。

二.数据的存储方式

1.大小端模式

对于某个4字节的int变量:0123 4567H,其最高有效字节(MSB)为01(1个字节8bit),最低有效字节(LSB)为67。多字节数据在内存里一定是占连续的几个字节的,根据数据在内存中的存储方式不同,可以分为大端方式和小端方式

大端方式:更高的有效字节存到更低地址中,这样的存储方式便于人类阅读。

下图所示的0800H,0801H指的是内存地址:

小端方式:更低的有效字节存到更低地址中,便于机器的处理。机器读多字节数据时是从低地址读到高地址的,采用小端方式,最先读到的是67。当CPU对两个int型变量进行加法操作的时候,也是应该先从最低有效字节进行加法。

2.边界对齐

现代计算机通常是按字节编址,即每个字节对应1个地址。通常也支持按字、按半字、按字节寻址:假设存储字长为32位,则1个字=32bit,半字=16bit。每次访存只能读/写1个字(也就是读取一整行,不能跨行读取)

无论是按半字还是字寻址,字地址,半字地址最终都要转化为字节地址。

这里1个字=4个字节,当给出了要访问的数据的字地址时,怎么将其转化为与之对应的字节地址:只需要将字地址逻辑左移两位即可,因为逻辑左移1位表示*2,逻辑左移两位表示*4。例如要访问2号字,2的二进制表示为10,逻辑左移两位后得到:1000(8),所以2号字的其实地址就是8号字节。半字地址的操作同理,只需要逻辑左移一位即可。

有的计算机会采取数据边界对齐的方式:

而有的计算机中会采取边界不对齐的方式:

例如,c语言中,char占1个字节,short占两个字节,int占4个字节。现在定义一个结构体,这个结构体包含3个char型变量,3个short型变量和1个int型变量。

对于对齐方式而言,当存储完3个char型变量后,会剩下1个字节的空间,这1个字节的空间不足以存放short和int,所以这个字节的空间不会存放任何数据。

对于不对齐的方式而言,存储完3个字节后,可以将第4个字节的空间用于存放short型变量的第1个字节,将第2行的第1个字节的空间用于存放short型变量的第2个字节。

总结:

如果利用不对齐的方式存储数据,当读出这个short型变量时,需要进行2次访存。只有将两个字的内容都读入,并且将第一行short的内容和第二行short的内容进行拼接,才能得到short型变量的完整表示。

而采用对齐方式存储数据,虽然存在一些空间的浪费,但是读入short型变量时,只需要进行1次访存。因为这个变量的所有数据都只存放在1个字中。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

打靶笔记w1r3s.v1.0

打靶笔记w1r3s.v1.0 nmap扫描与分析 主机发现 nmap -sn 192.168.218.0/24 历史版本为-sP(已经被放弃) n 不进行端口扫描192.168.218.155 创建文件夹保存端口信息 指定最低1万速率扫描所有端口 nmap -sT --min-rate 10000 -p- 192.168.218.155 nmapscan/ports-sS SYN扫描是快…

ubuntu安装notion

一、背景: 不用windwos系统,完全可以,然后基本软件都有,怎么安装notion呢 二、步骤 1. 更新源 echo "deb [trustedyes] https://apt.fury.io/notion-repackaged/ /" | sudo tee /etc/apt/sources.list.d/notion-repa…

【一小时学会Charles抓包详细教程】Charles移动端APP抓包之iOS手机端数据提取实战篇 (8)

🚀 个人主页 极客小俊 ✍🏻 作者简介:程序猿、设计师、技术分享 🐋 希望大家多多支持, 我们一起学习和进步! 🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注 Charles 移动端…

详解C/C++动态内存函数(malloc、free、calloc、realloc)

1. malloc和free 为解决静态内存开辟存在的问题,C语言提供了一个动态内存开辟的函数: malloc为memory allocation的简写,意为内存分配。 这个函数的作用是向内存申请一块连续可用的空间,并返回指向这块空间的指针。 比如&#xf…

Adversarial Nibbler挑战:与多元社区持续开展开放红队测试

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

【MySQL数据库】MySQL 高可用搭建方案——MHA实战

MHA(Master High Availability) MHA实战 MHA(Master High Availability) 一、MHA简介二、MHA搭建准备要求:mha集群搭建,4台服务器,1主2从,1台mha2.1实验思路2.2实验准备 三、搭建MyS…

【数据结构】链式二叉树详解

个人主页~ 链式二叉树基本内容~ 链式二叉树详解 1、通过前序遍历的数组来构建二叉树2、二叉树的销毁3、二叉树节点个数4、二叉树叶子节点个数5、二叉树第k层节点个数6、二叉树查找7、前序遍历8、中序遍历9、后序遍历10、层序遍历与检查二叉树是否为完全二叉树Queue.hQueue.c层序…

Nginx实战:防盗链

防盗链的概念 内容不在自己的服务器上,通过技术手段将其他网站的内容(比如 一些音乐、图片、软件的下载地址)放置在自己的网站中,通过这 种方法盗取其他网站的空间和流量 防盗链技术背景 防止第三方引用链接访问我们的图片&#x…

FJSP:蛇鹫优化算法(SBOA)求解柔性作业车间调度问题(FJSP),提供MATLAB代码

详细介绍 FJSP:蛇鹫优化算法(Secretary bird optimization algorithm,SBOA)求解柔性作业车间调度问题(FJSP),提供MATLAB代码-CSDN博客 完整MATLAB代码 FJSP:蛇鹫优化算法&#xff…

SQL实验 连接查询和嵌套查询

一、实验目的 1.掌握Management Studio的使用。 2.掌握SQL中连接查询和嵌套查询的使用。 二、实验内容及要求(请同学们尝试每道题使用连接和嵌套两种方式来进行查询,如果可以的话) 1.找出所有任教“数据…

十_信号7-信号集

int sigemptyset(sigset_t *set); 清空信号集 int sigfillset(sigset_t *set); 填充满 信号集 int sigaddset(sigset_t *set, int signum); 向信号集中添加信号 int sigdelset(sigset_t *set, int signum); 从型号集中删除信号 int sigismember(const sigset_t *set, int s…

人大金仓×广州医科大学附属肿瘤医院 互联网智慧医疗服务平台国产化升级

KINGBASE 广州医科大学附属肿瘤医院是国内领先的肿瘤专科医院,在金仓数据库的支撑下,近日成功完成移动智慧综合服务平台国产化升级。作为互联网智慧医疗服务平台项目的核心平台,预计将服务数十万人次。这一升级改造不仅提高了医疗服务的效率和…

961题库 北航计算机 组成原理选择题 附答案 选择题形式

有题目和答案,没有解析,不懂的题问大模型即可,无偿分享。 第1组 习题 某计算机采用大端方式,按字节编址。某指令中操作数的机器数为 1234 FF00H,该操作数采用基址寻址方式,形式地址 ( 用补码表示 ) 为FF1…

如何监控慢 SQL?

引言:在开发和维护数据库驱动的应用程序时,监控慢 SQL 查询是确保系统性能和稳定性的关键一环。慢 SQL 查询可能会导致系统性能下降、资源浪费和用户体验差等问题。因此,及时监控和优化慢 SQL 查询对于保障系统的正常运行和用户满意度至关重要…

neutron学习小结

概述 基于yoga版本学习neutron,通过源码、官方文档、部署环境进行学习 neutron-dhcp-agent neutron.agent.dhcp_agent.main 创建server,调oslo_service launch server,最后实际调了server的start方法 neutron.service.Service.start Serv…

【UML用户指南】-03-UML的14种图

1、结构图 1、类图(class diagram) 展现了一组类、接口、协作和它们之间的关系。 在面向对象系统的建模中所建立的最常见的图就是类图。类图给出系统的静态设计视图。 包含主动类的类图给出系统的静态进程视图。构件图是类图的变体。 2、对象图&a…

转让北京电力施工总承包二级资质变更条件和流程

在电力工程领域,资质等级是企业能否参与竞标、承接工程的重要标志之一。北京电力工程总包二级资质的转让,是指已经取得该资质的企业将其资质转让给需要的企业。这种转让是基于合作与共赢的原则,旨在推动电力工程行业健康、稳定发展&#xff0…

Gin入门

Gin入门 声明:本博客为看李文周大佬gin入门视频笔记gin入门 我的代码仓库6月 沉着冷静/2023 - 码云 - 开源中国 (gitee.com) 安装 go get -u github.com/gin-gonic/gin第一个Gin实例: package mainimport ("github.com/gin-gonic/gin" )…

llvm 3.5 源码分析 clang for x86 001 之搭环境

0,目标 编译 针对x86 的,debug 的 c语言的编译器 1,下载代码 git clone --recursive 。。。llvm-project.git $ cd llvm-project 2,预备代码 llvm 3.5 版本的源代码,早期版本,可能比较小比较容易debug $…

发送Http请求的两种方式

说明:在项目中,我们有时会需要调用第三方接口,获取调用结果,来实现自己的业务逻辑。调用第三方接口,通常是双方确定好,由对方开放一个接口,需要我们根据他们提供的接口文档,组装Http…