数据存储与运算

news2025/6/4 17:12:13

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

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


第一节:进制转换基础

✅ 常见进制:
  • 十进制(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  1011

    A 1101
    B 1011
    C 0110
    标记计算法:C就是A和B异或计算得出的标记位,每一位的01都是一个标记
    不同为0,相同为1,与0异或维持不变,与1异或反转自身
    C第一、四位的0表示,AB的第一、四位相同,无论是1还是0,异或运算0以后还是自身
    C第二、三位的1表示,AB的第二、三位不同,无论是1还是0,异或运算1以后都要反转,因为位不同,反转之后只能是对方的位

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

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

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

相关文章

【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…

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 等高线图 四、资源自取 前言 本文进行 …

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

自编码器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…

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进…

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

什么是模块联邦 在前端项目中&#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识别手机系统弹授权框包含某段文字-并自动点击确定按钮 一、前言 …