2024.3.13-408学习笔记-C-数据在内存中的存储

1、整数型存储

整数型存储就是所有整型家族里的数据类型的存储方式,也就是说包含了字符类型的存储(因为字符的''操作符的返回值是ASCII码值,故实际上存储的是整数)。

1.1、有符号整数

有符号整数包含charshortintlonglong long这几种类型的数据。

他们的二进制表示方法有三种:原码,反码,补码。

这三种表示方法均有符号位数值位两部分,符号位都是用0表示,用1表示,最高位的一位是被当做符号位,剩余的都是数值位。

原码:直接将数值按照正负数的形式翻译成二进制得到的就是原码。
反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。
补码:反码+1就得到补码。

正整数的原、反、补码都相同;负整数的三种表示方法各不相同。

有符号整数在内存中统一以补码的形式存储,并且以补码形式参与任何操作。

以补码形式进行存储的原因:
在计算机系统中,有符号数值一律用补码来表示和存储。

原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

1.2、有符号整数的特性

由于补码与数据类型限制精度的特性,产生了一种有意思的循环:
char类型为例子:

-128,-127…-2,-1,0,1,2…126,127,-128,-127…-2,-1,0,1,2…126,127,-128,-127…

总结为:阳极生阴,阴极生阳(有点模运算的感觉在里面)。

1.3、无符号整数

无符号整数包含unsigned charunsigned shortunsigned intunsigned longunsigned long long这几种类型的数据。

无符号数中没有原码-反码-补码的概念。

无符号整数的二进制表示形式只有一种,即直接将无符号整数翻译成对应的二进制形式,并且以这种形式在内存中存储。

1.4、无符号整数的特性

由于数据类型限制精度的特性,也产生了一种有意思的循环:
char类型为例子:

0,1,2…126,127,128…254,255,0,1,2…126,127,128…254,255,0,1,2…126,127,128


2、大小端字节序存储

我们知道,变量与变量在内存中的存储顺序是由定义顺序与所处内存区域决定(例如在主函数中先后定义ab两个变量,由于这两个变量存放在栈区,故a变量存放于高地址,b变量存放于低地址),这是变量与变量之间的存储顺序。

大小端字节序存储指的是单个变量内部,字节与字节之间的两种存储顺序。

大端字节序存储指的是:
单个数据内部,数据的低位字节内容保存在内存的高地址处,而数据的高位字节内容保存在内存的低地址处。

小端字节序存储指的是:
单个数据内部,数据的低位字节内容保存在内存的低地址处,而数据的高位字节内容保存在内存的高地址处。

有大小端模式之分的原因:

这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit位,但是在C语言中除了8bitchar之外,还有16bitshort型,32bitlong型(这个要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。

例如:一个16bitshort型变量x,在内存中的地址为0x0010x的值为0x1122,那么0x11为高字节,0x22为低字节。对于大端模式,就将0x11放在低地址0x0010中,0x22放在高地址0x0011中。小端模式,刚好相反。我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARMDSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

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

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

相关文章

切面条-蓝桥杯?-Lua 中文代码解题第1题

切面条-蓝桥杯?-Lua 中文代码解题第1题 一根高筋拉面,中间切一刀,可以得到2根面条。 如果先对折1次,中间切一刀,可以得到3根面条。 如果连续对折2次,中间切一刀,可以得到5根面条。 那么&#xf…

【ollama】(7):使用Nvidia Jetson Nano设备,成功运行ollama,运行qwen:0.5b-chat,速度还可以,可以做创新项目了

1,视频地址 https://www.bilibili.com/video/BV1Pj421o7W5/ 【ollama】(7):使用Nvidia Jetson Nano设备,成功运行ollama,运行qwen:0.5b-chat,速度还可以,可以做创新项目了 2&#x…

vuex购物车案例

store/index.js // 导入vue import Vue from vue // 导入vuex import Vuex from vueximport cart from ./module/cartVue.use(Vuex)// 创建仓库store const store new Vuex.Store({strict: true,modules: {cart} })// 导出仓库 export default storestore/modules/cart impo…

Rust的async和await支持多线程运行吗?

Rust的async和await的异步机制并不是仅在单线程下实现的,它们可以在多线程环境中工作,从而利用多核CPU的并行计算优势。然而,异步编程的主要目标之一是避免不必要的线程切换开销,因此,在单线程上下文中,asy…

【Java】容器|Set、List、Map及常用API

目录 一、概述 二、List 1、List的常用API 2、ArrayList 3、List遍历 三、Set 1、Set的常用方法: 2、HashSet 3、遍历集合: 四、Map 1、Map常用API 2、HashMap 3、遍历Map 五、迭代器 一、概述 在Java中所有的容器都属于Collection接口下的内容 1…

C语言数据结构(7)——树、二叉树前言

欢迎来到博主的专栏——C语言数据结构 博主ID:代码小豪 文章目录 树二叉树特殊二叉树满二叉树完全二叉树 完全二叉树的存储结构 树 树是一个非线性的数据结构,由N个结点构成的集合。 树的各个结点由一个根结点联系起来,这个根节点没有前驱…

Android中内存泄漏的检测,解决方案以及示例

单例模式使用不当引起的内存泄漏 1. 什么是内存泄漏? 安卓内存泄漏是因为长生命周期的对象持有了短生命周期的引用 导致本应该本回收的内存无法回收,导致内存的占用越来越大,最终可能导致程序崩溃或者系统资源不足等问题。 在Android开发中,内存泄漏是一个常见的问题,…

【leetcode热题】 分数到小数

给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数 。 如果小数部分为循环小数,则将循环的部分括在括号内。 如果存在多个答案,只需返回 任意一个 。 对于所有给定的输入,保证 …

Qt教程 — 3.4 深入了解Qt 控件:Input Widgets部件(3)

目录 1 Input Widgets简介 2 如何使用Input Widgets部件 2.1 Dial 组件-模拟车速表 2.2 QScrollBar组件-创建水平和垂直滚动条 2.3 QSlider组件-创建水平和垂直滑动条 2.4 QKeySequenceEdit组件-捕获键盘快捷键 Input Widgets部件部件较多,将分为三篇文章介绍…

DDR协议基础进阶(三)——(基本功能、初始化、MR寄存器)

DDR协议基础进阶(三)——(基本功能、初始化、MR寄存器) 一、DDR基本功能 DDR基本功能主要包括: 8-bit prefetch预取——8-bit,是指8位数据,即8倍芯片位宽的数据。由于DDR内部数据传输是32bit…

sadtalker-api/

运行,点击网址,加载不出 需要保存代码后,点击网址 [Bug]: ModuleNotFoundError: No module named torchvision.transforms.functional_tensor torchvision 0.17 promblem Open ./venv/lib/python3.10/site-packages/basicsr/data/degradati…

python3GUI--qt仿暴风影音视频播放器By:PyQt5(附下载地址)

文章目录 一.前言二.环境1.开发环境2.打包环境3.运行环境 三.软件截图1.启动页2.视频播放3.音频播放4.其他1.托盘2.对话框 四.功能总览五.代码展示&心得1.UI设计2.如何防止卡顿3.如何自定义组件 五.思考…

CSS3DRenderer, CSS3DSprite API 使用案例demo

CSS3DRenderer, CSS3DSprite API 使用案例demo <!DOCTYPE html> <html><head><title>three.js css3d - sprites</title><meta charset"utf-8"><meta name"viewport" content"widthdevice-width, user-scalabl…

VLC抓取m3u8视频

前言 最近想看一些网络视频&#xff0c;但是很多时候网页上是m3u8推流的&#xff0c;如果在线看&#xff0c;速度又慢&#xff0c;所以就想下载下来&#xff0c;就想到了VLC的推流&#xff0c;转换能力&#xff0c;查阅资料&#xff0c;加上实践&#xff0c;总结心得。 设置中…

RabbitMQ进阶

1.消息可靠性 消息从发送,到消费者接收,会经历多个过程: 其中的每一步都可能导致消息丢失,常见的丢失原因包括: - 发送时丢失: - 生产者发送的消息未送达exchange - 消息到达exchange后未到达queue - MQ宕机,queue将消息丢失 - consumer接收到消息后未消费就宕机 …

【C语言】浮点型在内存中的存储

文章目录 例题引入剖析原因浮点型的二进制转换&#xff08;M&#xff09;正负号之分&#xff08;S&#xff09;科学记数法&#xff08;E&#xff09;关于 S E M 在内存中的存储存取浮点型时的情况讨论 例题解析整形存储为浮点型并输出浮点型存储为整形并输出 在我的上一篇博客中…

接雨水-热题 100?-Lua 中文代码解题第4题

接雨水-热题 100&#xff1f;-Lua 中文代码解题第4题 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释…

算法——前缀和之除自身以外数组的乘积、和为K的子数组、和可被K整除的子数组、连续数组、矩阵区域和

这几道题对于我们前面讲过的一维、二维前缀和进行了运用,包含了面对特殊情况的反操作 目录 4.除自身以外数组的乘积 4.1解析 4.2题解 5.和为K的子数组 5.1解析 5.2题解 6.和可被K整除的子数组 6.1解析 6.2题解 7.连续数组 7.1题解 7.2题解 8.矩阵区域和 8.1解析 …

GET和POST方法的区别

GET和POST的区别 在我们开发项目的时候常常会在Controller层使用到POST方法或者GET方法&#xff0c;犹豫到底将接口定义为GET方法还是POST方法&#xff1f;那这两者之间有什么区别呢&#xff1f; 看一下官方定义&#xff1a; GET 和 POST 是 HTTP 协议中最常用的两种请求方法…

爬虫学习 Scrapy中间件代理UA随机selenium使用

目录 中间件UA、代理处理---process_requestUA随机 代理处理seleniumscrapy 中间件 控制台操作 (百度只起个名 scrapy startproject mid scrapy genspider baidu baidu.com setting.py内 ROBOTSTXT_OBEY FalseLOG_LEVEL "WARNING"运行 scrapy crawl baidu middle…