当前位置: 首页 > article >正文

数据存储与运算

计算机中的数据存储与运算

输出地址后看不懂格式,为什么?


第一节:进制转换基础

✅ 常见进制:
  • 十进制(Decimal):日常使用的 0~9
  • 二进制(Binary):计算机底层使用,仅有 0 和 1
  • 八进制(Octal):0~7,早期用于嵌入式
  • 十六进制(Hex):09A~F(代表 0~15),常用于表示地址,为二进制的缩写等
✅ 为什么使用十六进制表示二进制?
  • 二进制太长不直观,容易出错
  • 1 个十六进制位 = 4 个二进制位(更简洁)
  • 举例:11111111 11111111 可以写成 0xFFFF
  • 程序员常用 0x 开头表示十六进制,方便调试与内存分析
✅ 转换示例:
十进制二进制十六进制
1010100xA
255111111110xFF
16100000x10

第二节:数据存储方式

✅ 什么是“位数”?
  • 位(bit):计算机的最小单位,0 或 1

  • 32 位系统:一个寄存器/地址一次最多处理 32 位数据,11111111 11111111 11111111 11111111 ,0xFFFFFFFF

  • 64 位系统:一次最多处理 64 位数据,以上例子的两倍

  • 位数决定:寻址能力、运算精度、可用内存(每个地址能存一个字节的内容)等

✅ 什么是“字节”?

  • 一字节等于8位,2^8,能存2的8次方大小的数据

常见存储范围

8 位2⁸ = 256256 个值0 ~ 255 或 -128 ~ 127
32 位2³² ≈ 42 亿42 亿个值0 ~ 4294967295 或 -2147483648 ~ 2147483647

16位 65536 -32768~32767

✅ 整型存储:
  • 占用固定字节数(如 int 通常 4 字节 = 32 位)

  • 按照补码方式存储(后面详细讲)

  • 二进制按位存储,例如:

    int a = 5; // 实际存储:00000000 00000000 00000000 00000101 32位系统下地址:0x00 00 00 05 64位同理
    
✅ 浮点型存储:(极为复杂不做了解)
  • 拆成三部分:符号位 + 指数位 + 尾数位(有效数字)
  • 单精度(float):32 位 = 1 + 8 + 23
  • 双精度(double):64 位 = 1 + 11 + 52
✅ 单精度 vs 双精度区别:(只需要知道是双倍精度,存储空间是双倍就行了)
属性float(单精度)double(双精度)
位数32 位64 位
精度约 7 位十进制约 15 位十进制
范围±3.4e38±1.8e308
占用内存4 字节8 字节

✅ 最通俗的一句话总结:(也不用学)

在浮点数中:

  • 尾数位 决定 “是什么数” (有效数字)
  • 指数位 决定 “它放在哪个大小范围” (缩放倍数)

字符型存储与 ASCII

✅ 字符 = 整数
  • 在底层,char 类型是 1 字节整数
  • 字符用整数存储,那么为什么知道是字符呢?对应表格
  • 字符 'A' 实际存储值为 65,对应 ASCII 编码表,0100 0001,0x41
✅ ASCII 表示例:
字符十进制二进制
'A'6501000001
'a'9701100001
'0'4800110000

✅ 为什么A和a差了32?

0x20

只需要记住大写A是65就记住全部

✅ 演示代码:
char c = 'A';
cout << (int)c << endl; // 输出 65
cout << (int)(c + 0x20) << endl;
cout << (c += 0x20) << endl;
cout << (c -= 0x20) << endl;

✅ 说明:字符本质上就是整数,赋值/比较时可作为数值使用。

ASCII码不过一个字节大小范围,0~255,如何记得下全世界数百上千万的符号?

不同的语言体系有不同的编码版本,

✅ 扩展:其他编码(中文/Unicode)
编码方式特点示例(字符“你”)
ASCII单字节,只支持英文不支持
GB2312/GBK汉字双字节编码0xC4E3
UTF-8可变长度编码,全球通用0xE4 0xBD 0xA0(3 字节)
Unicode/UTF-16固定宽度(2 字节)0x4F60
十六进制序列Windows-1252GBKUTF-8
0xBDB2½ (分数 1⁄2)汉字 “貢”非法²

✅ 总结

  • 数据在内存中以 二进制补码 的形式存储
  • 字符、整数、浮点数都有不同的存储结构
  • 编码方式影响符号处理,补码是主流方式
  • ASCII 编码将字符与整数绑定,字符可以看作数
  • 二进制运算是低级优化与嵌入式开发的基础
  • UTF-8/Unicode 等是现代字符集标准,支持多语言
  • 计算机内存是一个大快递仓库,每个字节有唯一编号(地址)
  • 数据在内存中必须分配“空间”(多少字节)
  • 不同类型变量占用空间不同,越大越精确,但浪费空间

第三节:编码方式(原码、反码、补码)

(为何要用补码,原理较为复杂,不要求掌握,只要求掌握计算补码)

计算机中负数存的不是原码,而是补码,便于计算机运算,(为什么)

✅ 有符号数(负数):
  • 最高位为符号位:0 代表正,1代表负,以四位数据的原码举例,1为0001,-1为1001
  • 正数用原码存储,讨论补码时,都是讨论负数
✅ 编码定义:
编码方式定义
原码符号位 + 绝对值(除去符号的值)
反码原码除符号位外取反
补码反码 + 1

总结就是,补码就是正数原码取反+1

-5的补码计算 -> 抛开第一位符号位 -> 5的二进制原码 -> 0101 -> 取反 -> 1010 -> +1 -> 1011

5的原码是0101,-5的补码为1011

✅ 原因、原理:

芯片底层进行加减法运算的时候,只使用加法模块,单独设计减法模块太复杂,那么减法用加法模块替代,如何替代?

以四位长度数据计算举例:5 - 1 = 5 + (2^4 - 1) - 2^4
1.此处2^4是一个4位长度的数据的最大范围 + 1
二进制表示为:0101 + (10000 - 0001)- 10000 = 0101 + 1111 - 10000

2.此处的1111也就是(10000 - 0001)的计算结果,但其实1111是0001取反+1的结果,而非真正执行了减法,意思就是用取反模块和加法模块在此处模拟出了减法模块,但此处还没有结束,我们继续计算,10100 - 10000,这一步又要如何减去呢?

3.前面提到过,这是一个4位长度的数据,所以会自动把最高的那一位给丢弃,也就达成了减去最高位的1的效果,最后的结果也就是0100也就是4,5 - 1 = 4,就完成了,全程没有使用减法模块

4.这便是计算补码的原因以及原理,所以负数都以补码的形式存储,运算的时候使用的是加法模块,原码和补码也就是通过取反+1互相转换,1的原码为0001,补码为1111,(10000 - 0001) = 1111,(10000 - 1111) = 0001

✅ 示例:以 8 位为例,表示 -5:
编码方式二进制表达
原码10000101
反码11111010
补码11111011 ✅
✅ 无符号数 unsigned 前缀 unsigned int 无符号整型 unsigned double 无符号浮点型
  • 全部位用于表示数值,不能表示负数
  • 例如 8 位无符号最大值为 255,0 ~ 255, 二进制 0000 0000 ~ 1111 1111
  • 带符号最大值为 127,最小为-128,也就是 0 ~ 127,-1 ~ -128
  • 二进制 0000 0000 ~ 0111 1111, 原码1000 0001 ~ 1111 1111,补码 1111 1111 ~ 1000 0001

第四节:二进制运算基础

✅ 常见运算符:
运算符含义示例(a = 5, b = 3)a = 0101, b = 0011
&按位与a & b = 1
|按位或a | b = 7
^按位异或a ^ b = 6
~取反~a = -6
<<左移a << 1 = 10
>>右移a >> 1 = 2
✅ 十进制类比:
运算符类似什么示例
&相当于“都满足”0101 & 0011 = 0001
|相当于“至少一个满足”0101 | 0011 = 0111
^相当于“不同为真”0101 ^ 0011 = 0110
~相当于“取反”~00000101 = 11111010
<<乘 2^n101 << 1 = 1010
>>除 2^n101 >> 1 = 2
✅ 运算例题:
  1. 7 & 3 = 0111 & 0011 = 0011 = 3
  2. 4 | 2 = 0100 | 0010 = 0110 = 6
  3. 5 ^ 1 = 0101 ^ 0001 = 0100 = 4
  4. ~1 = 11111110(此处取反后为补码,补码无法一眼看出大小,通过反码+1还原成原码,可以看出实际大小)
  5. 2 << 2 = 88 >> 1 = 4

✅ 位运算和普通数学运算之间的关系概览

位运算符数学意义示例对应数学操作
<< n左移 n 位a << n = a × 2ⁿ快速乘法(×2ⁿ)
>> n右移 n 位a >> n = a ÷ 2ⁿ(整数除法)快速除法(÷2ⁿ,舍去余数)
^按位异或(相同为0)a ^ b二进制的“无进位加法”
~按位取反~a-a - 1 等价

✅ 一、<< 左移:等于乘以 2 的 n 次方

a << n ≡ a × 2

示例:

3 << 2 = 3 × 4 = 12

二进制表示:

3 = 00000011  
左移 2 位 → 00001100 = 12

✅ 二、>> 右移:等于除以 2 的 n 次方(向下取整)

a >> n ≡ a ÷ 2ⁿ(向下取整)

示例:

19 >> 2 = 19 ÷ 4 = 4 (舍去余数)

✅ 三、^ 按位异或:相同为 0,不同为 1(无进位加法)

a = 1101  
b = 1011  
→ a ^ b = 0110  此处第一位和第四位没有进位

🔁 **异或的一大作用:**用于交换两个数

a ^ a = 0
a ^ 0 = a

常用于:

  • 交换两个数不用临时变量:(原理,能理解最好,但并不常用到,可以自己推一遍)
a ^= b;
b ^= a;
a ^= b;
a = 1101  
b = 1011  
a ^= b; a  1101  b  1011  -> a  0110
b ^= a; a  0110  b  1011  -> b  1101
a ^= b; a  0110  b  1101  -> a  1011A 1101B 1011C 0110标记计算法:C就是A和B异或计算得出的标记位,每一位的01都是一个标记不同为0,相同为1,与0异或维持不变,与1异或反转自身C第一、四位的0表示,AB的第一、四位相同,无论是1还是0,异或运算0以后还是自身C第二、三位的1表示,AB的第二、三位不同,无论是1还是0,异或运算1以后都要反转,因为位不同,反转之后只能是对方的位

🧠 建议:手动练习补码运算、位操作、小型进制转换程序,有助于理解底层原理。

相关文章:

数据存储与运算

计算机中的数据存储与运算 输出地址后看不懂格式&#xff0c;为什么&#xff1f; 第一节&#xff1a;进制转换基础 ✅ 常见进制&#xff1a; 十进制&#xff08;Decimal&#xff09;&#xff1a;日常使用的 0~9二进制&#xff08;Binary&#xff09;&#xff1a;计算机底层使…...

【2025最新】Java图书借阅管理系统:从课程作业到实战应用的完整解决方案

【2025最新】Java图书借阅管理系统&#xff1a;从课程作业到实战应用的完整解决方案 目录 【2025最新】Java图书借阅管理系统&#xff1a;从课程作业到实战应用的完整解决方案**系统概述** **核心功能模块详解****1. 系统登录与权限控制****2. 借阅管理模块****3. 用户角色管理…...

springcloud openfeign 请求报错 java.net.UnknownHostException:

现象 背景 项目内部服务之间使用openfeign通过eureka注册中心进行服务间调用&#xff0c;与外部通过http直接调用。外部调用某个业务方提供的接口需要证书校验&#xff0c;因对方未提供证书故设置了忽略证书校验代码如下 Configuration public class IgnoreHttpsSSLClient {B…...

【harbor】--配置https

使用自建的 CA 证书来自签署和启用 HTTPS 通信。 &#xff08;1&#xff09;生成 CA认证 使用 OpenSSL 生成一个 2048位的私钥这是 自建 CA&#xff08;证书颁发机构&#xff09; 的私钥&#xff0c;后续会用它来签发证书。 # 1创建CA认证 cd 到harbor [rootlocalhost harbo…...

Oracle 临时表空间详解

Oracle 临时表空间详解 一 临时表空间概述 临时表空间(Temporary Tablespace)是Oracle数据库中用于存储临时数据的专用空间&#xff0c;主要用于&#xff1a; 排序操作(ORDER BY, GROUP BY等)哈希连接(HASH JOIN)临时表数据某些类型的索引创建临时LOB对象存储 二 临时表空间…...

深入理解享元模式:用Java实现高效对象共享

享元模式&#xff08;Flyweight&#xff09;的核心思想是对象复用&#xff0c;通过共享技术减少内存占用&#xff0c;就像"共享单车"一样让多个调用者共享同一组细粒度对象。 什么是享元模式&#xff1f; 享元模式是一种结构型设计模式&#xff0c;它通过共享技术有…...

OptiStruct实例:消声器前盖ERP分析(2)RADSND基础理论

13.2 Radiated Sound Output Analysis( RADSND ) RADSND 方法通过瑞利积分来求解结构对外的辐射噪声。其基本思路是分为两个阶段&#xff0c;如图 13-12 所示。 图13-12 结构辐射噪声计算示意图 第一阶段采用有限元方法&#xff0c;通过频响分析(模态叠加法、直接法)工况计算结…...

barker-OFDM模糊函数原理及仿真

文章目录 前言一、巴克码序列二、barker-OFDM 信号1、OFDM 信号表达式2、模糊函数表达式 三、MATLAB 仿真1、MATLAB 核心源码2、仿真结果①、barker-OFDM 模糊函数②、barker-OFDM 距离分辨率③、barker-OFDM 速度分辨率④、barker-OFDM 等高线图 四、资源自取 前言 本文进行 …...

Linux.docker.k8s基础概念

1.Linux基本命令 cat 查看文件内容。 cd 进入目标目录。 ll 查询当前路劲下文件的详细信息。 ls 查询当前路劲下的文件。 touch 建立一个文件。 mkdir 建立一个文件夹。 rm 删除文件或者目录。 mv 移动目录和重新命名文件。 unzip 解压。 top 查看当前线程的信息。 find …...

GIT命令行的一些常规操作

放弃修改 git checkout . 修改commit信息 git commit --amend 撤销上次本地commit 1、通过git log查看上次提交的哈希值 2、git reset --soft 哈希值 分支 1.创建本地分支 git branch 分支名 2.切换本地分支 git checkout mybranch&#xff1b; 3.创建一个新分支并…...

近期知识库开发过程中遇到的一些问题

我们正在使用Rust开发一个知识库系统&#xff0c;遇到了一些问题&#xff0c;在此记录备忘。 错误&#xff1a;Unable to make method calls because underlying connection is closed 场景&#xff1a;在docker中调用headless_chrome时出错 原因&#xff1a;为减小镜像大小&am…...

3.RV1126-OPENCV 图像叠加

一.功能介绍 图像叠加&#xff1a;就是在一张图片上放上自己想要的图片&#xff0c;如LOGO&#xff0c;时间等。有点像之前提到的OSD原理一样。例如&#xff1a;下图一张图片&#xff0c;在左上角增加其他图片。 二.OPENCV中图像叠加常用的API 1. copyTo方法进行图像叠加 原理…...

使用 HTML + JavaScript 实现一个日历任务管理系统

在现代快节奏的生活中&#xff0c;有效的时间管理变得越来越重要。本项目是一个基于 HTML 和 JavaScript 开发的日历任务管理系统&#xff0c;旨在为用户提供一个直观、便捷的时间管理工具。系统不仅能够清晰地展示当月日期&#xff0c;还支持事件的添加、编辑和删除操作&#…...

车载诊断架构SOVD --- 车辆发现与建连

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...

Notepad++找回自动暂存的文件

场景&#xff1a; 当你没有保存就退出Notepad&#xff0c;下次进来Notepad会自动把你上次编辑的内容显示出来&#xff0c;以便你继续编辑。除非你手动关掉当前页面&#xff0c;这样Notepad就会删除掉自动保存的内容。 问题&#xff1a; Notepad会将自动保存的文件地址,打开Note…...

DL00924-基于深度学习YOLOv11的工程车辆目标检测含数据集

文末有代码完整出处 &#x1f697; 基于深度学习YOLOv11的工程车辆目标检测——引领智能识别新潮流&#xff01; &#x1f680; 随着人工智能技术的飞速发展&#xff0c; 目标检测 已经在各个领域取得了显著突破&#xff0c;尤其是在 工程车辆识别 这一关键技术上。今天&#…...

Axure RP11安装、激活、汉化

一:注册码 Axure RP11.0.0.4122在2025-5-29日亲测有效: 49bb9513c40444b9bcc3ce49a7a022f9...

【PhysUnits】15.6 引入P1后的左移运算(shl.rs)

一、源码 代码实现了Rust的类型级二进制数的左移运算(<<)&#xff0c;使用类型系统在编译期进行计算。 use super::basic::{Z0, P1, N1, B0, B1, NonZero, NonOne, Unsigned}; use super::sub1::Sub1; use core::ops::Shl;// 左移运算&#xff08;<<&#xff09…...

自编码器Auto-encoder(李宏毅)

目录 编码器的概念&#xff1a; 为什么需要编码器&#xff1f; 编码器什么原理&#xff1f; 去噪自编码器: 自编码器的应用&#xff1a; 特征解耦 离散隐表征 编码器的概念&#xff1a; 重构&#xff1a;输入一张图片&#xff0c;通过编码器转化成向量&#xff0c;要求再…...

数据结构之堆(topk问题、堆排序)

一、堆的初步认识 堆虽然是用数组存储数据的数据结构&#xff0c;但是它的底层却是另一种表现形式。 堆分为大堆和小堆&#xff0c;大堆是所有父亲大于孩子&#xff0c;小堆是所有孩子大于父亲。 通过分析我们能得出父子关系的计算公式&#xff0c;parent(child-1)/2&#xff…...

SpringBoot使用ffmpeg实现视频压缩

ffmpeg简介 FFmpeg 是一个开源的跨平台多媒体处理工具集&#xff0c;用于录制、转换、编辑和流式传输音频和视频。它功能强大&#xff0c;支持几乎所有常见的音视频格式&#xff0c;是多媒体处理领域的核心工具之一。 官方文档&#xff1a;https://ffmpeg.org/documentation.h…...

【Elasticsearch】exists` 查询用于判断文档中是否存在某个指定字段。它检查字段是否存在于文档中,并且字段的值不为 `null`

在 Elasticsearch 中&#xff0c;exists 查询用于判断文档中是否存在某个指定字段。它检查字段是否存在于文档中&#xff0c;并且字段的值不为 null。如果字段存在且有值&#xff08;即使是空字符串或空数组&#xff09;&#xff0c;则 exists 查询会匹配该文档&#xff1b;如果…...

2025-05-31 Python深度学习9——网络模型的加载与保存

文章目录 1 使用现有网络2 修改网络结构2.1 添加新层2.2 替换现有层 3 保存网络模型3.1 完整保存3.2 参数保存&#xff08;推荐&#xff09; 4 加载网络模型4.1 加载完整模型文件4.2 加载参数文件 5 Checkpoint5.1 保存 Checkpoint5.2 加载 Checkpoint 本文环境&#xff1a; Py…...

长安链起链调用合约时docker ps没有容器的原因

在调用这个命令的时候&#xff0c;发现并没有出现官方预期的合约容器&#xff0c;这是因为我们在起链的时候没有选择用docker的虚拟环境&#xff0c;实际上这不影响后续的调用&#xff0c;如果想要达到官方的效果那么你只需要在起链的时候输入yes即可&#xff0c;如图三所示...

Appium+python自动化(七)- 认识Appium- 上

简介 经过前边的各项准备工作&#xff0c;终于才把appium搞定。 一、appium自我介绍 appium是一款开源的自动化测试工具&#xff0c;可以支持iOS和安卓平台上的原生的&#xff0c;基于移动浏览器的&#xff0c;混合的应用&#xff08;APP&#xff09;。 1、 使用appium进…...

数据中心双活架构解决方案

数据中心双活架构解决方案 数据中心双活架构(Active-Active Data Center)旨在实现业务高可用、负载均衡和灾难自动切换。以下是完整的解决方案,涵盖架构设计、关键技术、实施步骤及最佳实践。 1. 双活架构设计 1.1 基本架构模型 同城双活(Metro Active-Active) 两个数据…...

YOLOv5 详解:从原理到实战的全方位解析

在计算机视觉领域&#xff0c;目标检测作为核心任务之一&#xff0c;始终吸引着众多研究者和开发者的目光。YOLO&#xff08;You Only Look Once&#xff09;系列算法凭借其高效、准确的特点&#xff0c;在目标检测领域占据重要地位。而 YOLOv5 作为 YOLO 系列算法的重要成员&a…...

模块联邦:更快的微前端方式!

什么是模块联邦 在前端项目中&#xff0c;不同团队之间的业务模块可能有耦合&#xff0c;比如A团队的页面里有一个富文本模块&#xff08;组件&#xff09;&#xff0c;而B团队 的页面恰好也需要使用这个富文本模块。 传统模式下&#xff0c;B团队只能去抄A团队的代码&#x…...

前端基础学习html+css+js

HTML 区块 div标签&#xff0c;块级标签 span包装小部分文本&#xff0c;行内元素 表单 CSS css选择器 css属性 特性blockinlineinline-block是否换行✅ 换行❌ 不换行❌ 不换行可设置宽高✅ 支持❌ 不支持✅ 支持常见元素div容器 p段落 h标题span文本容器 a超链接img图片…...

手机打电话时将对方DTMF数字转为RFC2833发给局域网SIP坐席

手机打电话时将对方DTMF数字转为RFC2833发给局域网SIP坐席 --局域网SIP坐席呼叫 上一篇&#xff1a;手机打电话时由对方DTMF响应切换多级IVR语音菜单&#xff08;完结&#xff09; 下一篇&#xff1a;安卓App识别手机系统弹授权框包含某段文字-并自动点击确定按钮 一、前言 …...