【计算机组成原理】数据的表示和运算·进位计数制
🚩 本文已收录至专栏:计算机基础
我们可以通过显示屏看到各种形式的数据信息,但数据是如何在计算机中表示呢?运算器又是如何实现数据的算数、逻辑运算?
十进制数是最适合我们日常使用的一种计数方式,除此之外,我们还会用到八进制数和十六进制数,但二进制是最适合计算机使用的计数方法,这是因为:
- 它可以使用两个稳定状态的物理器件来进行表示,例如高低电压。
- 0,1正好对应逻辑值 假、真。方便实现逻辑运算。
- 可以很方便地使用逻辑门电路实现算数运算。
文章内容概览:

一.演变历程
我们的计数形式进行了长期的演变,尽管象征计数意义的符号在不断的发生改变,淘汰一套又一套,但其核心思想使用不同的符号代表不同权重却始终未曾发生改变,只是为了适应多变与复杂的情景在不断的进行改进,使其使用更加便利。
-
例如我们先使用‘ I ’代表 1个 ,物品增多后发现 I 太多了不方便,便引入‘ 一 ’代表 5个 ,以此简化表示。

-
随着时间的推移,计数越来越庞大,为了便捷我们便又引入了更多的符号代表不同的权值。由于这种方式是基于“ 加法 ”思想的计数方法,随着数据规模增大,相应表示也不可避免的会越来越复杂。例如:DMCLXVI -> 1000+500+100+50+10+5+1 = 1666

-
为了解决上述问题,我们又发明了基于“ 乘法 ”思想的计数方法,仍旧是使用不同符合代表权重,但是不再是一个固定值,而是根据所在位置动态变化,也就是说符号所在的位置也反应权重。由此催生了我们现在最常使用的十进制数。符号权值 = 符号值 × 符号所处位置权值。

-
由此我们可以推断出其表达公式:

-
由于 0~9 一共只有十种符号,要表达加法的时候必须逢十进一,这也是为什么叫做十进制。
二.进位计数制
(1) 引入
基于“ 乘法 ”思想的计数方法,我们可以根据权值符号的数量不同得出不同的进制计数法。
我们使用基数表示每个数码位所用到的不同符号的个数,r 进制的基数为 r。 例如:十进制表示每个位置可以用到十种不同的符号。
由此可以得出二进制,八进制,十进制,十六进制:
二进制:0,1 ====> 每个位置两种表示符号
八进制:0,1,2,3,4,5,6,7 ====> 每个位置八种表示符号
十进制:0,1,2,3,4,5,6,7,8,9 ====> 每个位置十种表示符号
十六进制:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F ====> 每个位置十六种表示符号
其加法运算方式与十进制类似,同样是逢 r 进一。例如:
二进制 : 11 + 11 = 110 逢二进一
运算:0号位:1 + 1 = 2 = 2(进位) + 0 1号位:1 + 1 + 1(进的一) = 3 = 2(进位) + 1 2号位: 1(进的一)
八进制: 54 + 55 = 131 逢八进一
运算: 0号位:4 + 5 = 9 = 8(进位) + 1 1号位:5 + 5 + 1(进的一) = 11 = 8(进位) + 3 2号位:1(进的一)
十进制: 37 + 55 = 92 逢十进一
运算: 0号位:5 + 7 = 12 = 10(进一) + 2 1号位:5 + 3 + 1(进的一) = 9
十六进制:59 + 58 = B1 逢十六进一
运算: 0号位:8 + 9 = 17 = 16(进一) + 1 1号位:5 + 5 + 1(进的一) = 11 = B
注意:十六进制中 A -> 10 B -> 11 C -> 12 D -> 13 E -> 14 F -> 15
(2) 任意进制 <-> 十进制
(2.1) 任意进制 -> 十进制
我们可以得出任意进制转 r 进制公式,得到一套快速计算任意进制转为十进制的计算模板。记小数点左边第一位为0号位置:
十进制 = Σ(数码位值× 基数 ^ 位置) = Σ(数码位值× 位权)

(2.2) 十进制-> 任意进制
对于十进制转为其他任意进制我们也有一套通用的计算模板,但是对于整数部分和小数部分的计算方式却有所差异。
- 对于整数部分:r进制整数部分 = (十进制整数部分 % r) 不断取余数

例如:我们将十进制 75 转为二进制数,最后结果为:1001011,注意顺序!

十进制转为其他进制写法类似:

- 对于小数部分:r进制小数部分 = (十进制小数部分 × r ) 不断取出整数

例如:我们将十进制 0.3 转为二进制数,最后结果为:0.01001…可以发现无限循环了,也就是说我们无法获取到其二进制的精确表示,于此对于无限小数我们只需取到指定精度即可,注意顺序!

十进制转为其他进制写法类似:

(3) 二进制 <-> 八进制
(3.1) 二进制 -> 八进制
我们知道八进制的基数为 8,即每个位数可以表示八种不同情况。而二进制的基数为 2,即每个位数可以表示两种不同情况。假如我们把三个二进制位组合便可以得到2×2×2=8种不同情况,正好对应八进制每个数码位的八种情况。由此,我们可以得出二进制转八进制的计算方式:将二进制数每3位分为一组,每组转换成对应的八进制符号。

- 由此上述二进制 -> 八进制为:1111000010.011010 -> 1702.32
注意:当小数点左边位数不够3的整数倍向左补0,当小数点右边位数不够3的整数倍向右补0。
(3.2) 八进制 -> 二进制
八进制转为二进制相当于一个逆向的过程,即每位八进制数可以对应 3 位二进制数。我们只需一一将每位八进制数转为二进制形式即可获取到其所对应的二进制数。

例如上述我们将八进制数251.5转为二进制数,只需一一转为二进制数再进行组合即可。
(4) 二进制 <-> 十六进制
(4.1) 二进制 -> 十六进制
同理,我们知道十六进制的基数为16,即每个位数可以表示十六种不同情况。而二进制的基数为2,即每个位数可以表示两种不同情况。假如我们把四个二进制位组合便可以得到2×2×2×2=16种不同情况,正好对应十六进制每个数码位的十六种情况。由此,我们可以得出二进制转十六进制的计算方式:将二进制数每4位分为一组,每组转换成对应的十六进制符号。

- 由此上述二进制 -> 十六进制为:1111000010.011010 -> 3C2.68
注意:当小数点左边位数不够4的整数倍向左补0,当小数点右边位数不够4的整数倍向右补0。
(4.2)十六进制 -> 二进制
十六进制转为二进制相当于一个逆向的过程,即每位十六进制数可以对应 4 位二进制数。我们只需一一将每位十六进制数转为二进制形式即可获取到其所对应的二进制数。
十六进制:AE861 -> 二进制:1010 1110 1000 0110. 0001
一一进行转换,最后再按顺序组合起来。
A -> 1010
E -> 1110
8 -> 1000
6 -> 0110
1-> 0001
(5) 各种进制常见书写方式
对于不同的进制数我们两种常见的书写方式:
-
用括号()包围进制数,然后在括号右下角进行标识即可
-
直接在部分进制数后写上指定字母,例如:二级制B(binary), 十进制D(decimalism), 十六进制H(hexadecimal)或 0x,

三.真值、机器数
如果我们需要转换的十进制还带有正负号,此时我们就需要再增加一个符号位用来标识正负号,例如用0标识正,1标识负。
例如:
15 -> 1111 + 15 -> 0 1111
8 -> 1000 - 8 -> 1 1000
其中 +15 和 -8 为真值,而 0 1111 和 1 1000 为机器数
我们规定:
-
真值:符合人类习惯的数字。
-
机器数:数字实际存到机器里的形式,正负号需要被“数字化”。
相关文章:
【计算机组成原理】数据的表示和运算·进位计数制
🚩 本文已收录至专栏:计算机基础 我们可以通过显示屏看到各种形式的数据信息,但数据是如何在计算机中表示呢?运算器又是如何实现数据的算数、逻辑运算? 十进制数是最适合我们日常使用的一种计数方式,除此之…...
C++ Primer第五版_第十四章习题答案(21~30)
文章目录 练习14.21练习14.22头文件CPP文件 练习14.23头文件CPP文件 练习14.24头文件CPP文件 练习14.25练习14.26练习14.27练习14.28练习14.29练习14.30 练习14.21 编写 Sales_data 类的 和 运算符,使得 执行实际的加法操作而 调用。相比14.3节和14.4节对这两个运…...
服务器性能调优
硬件 如果是硬件瓶颈就换硬件 (包括CPU、内存、网卡) 软件 如果是方案架构设计有问题就换方案,比如mysql、redis方案有问题 建议先 top 看下软件瓶颈在哪,CPU、内存、网络(netstat),哪个进程占…...
带你深入学习k8s--(三) pod 管理
目录 一、简介 1、什么是pod 2、为什么要有pod 二、pod的分类 0、pod常用命令命令 1、准备镜像 2、自主式pod 3、控制器创建pod 4、扩容pod数量 5、通过service暴露pod(负载均衡,自动发起) 6、更新应用版本 三、编写yaml文件 四、Pod生命周期…...
前端系列11集-ES6 知识总结
ES Module 优点 静态分析 浏览器和 Node 都支持 浏览器的新 API 能用模块格式提供 不再需要对象作为命名空间 export 用于规定模块的对外接口 输出的接口与其对应的值是动态绑定关系可以取到模块内部实时的值 import 用于输入其他模块提供的功能 具有提升效果,会提升…...
连接分析工具箱 | 利用CATO进行结构和功能连接重建
导读 本研究描述了一个连接分析工具箱(CATO),用于基于扩散加权成像(DWI)和静息态功能磁共振成像(rs-fMRI)数据来重建大脑结构和功能连接。CATO是一个多模态软件包,使研究人员能够运行从MRI数据到结构和功能连接组图的端到端重建,定制其分析并…...
【目标检测论文阅读笔记】Detection of plane in remote sensing images using super-resolution
Abstract 由于大量的小目标、实例级噪声和云遮挡等因素,遥感图像的目标检测精度低,漏检率或误检率高。本文提出了一种新的基于SRGAN和YOLOV3的目标检测模型,称为SR-YOLO。解决了SRGAN网络 对超参数的敏感性和模态崩溃问题。同时,Y…...
外卖app开发流程全解析
外卖app开发是现代餐饮业的一个必备部分。在这个数字化时代,人们更愿意使用手机应用程序来订购食品。因此,为了满足客户需求,餐饮企业需要开发自己的外卖app。 第一步:确定目标受众 在开始外卖app的开发之前,需要确定…...
BUUCTF jarvisoj_level0
小白垃圾做题笔记而已,不建议阅读。。。 这道题感觉主要就是64位程序ebp8 题目中给出了shellcode 我们直接将返回地址覆盖就好。 在main函数中调用了vulnerable_function()函数。 vulnerable函数是一个漏洞函数:(存在缓溢出),我们只需要将…...
网络安全之入侵检测
目录 网络安全之入侵检测 入侵检测经典理论 经典检测模型 入侵检测作用与原理 意义 异常检测模型(Anomaly Detection) 误用检测模型(Misuse Detection) 经典特征案例 编辑自定义签名 编辑 签名检查过程 检测生命周期…...
元数据管理
1、业务元数据 描述 ”数据”背后的业务含义主题定义:每段 ETL、表背后的归属业务主题。业务描述:每段代码实现的具体业务逻辑。标准指标:类似于 BI 中的语义层、数仓中的一致性事实;将分析中的指标进行规范化。标准维度…...
C# WebService的开发以及客户端调用
目录 1、WebService简介 1.1 什么是XML? 1.2 什么是Soap? 1.3 什么是WSDL? 2、WebService与WebApi的区别与优缺点 2.1 WebService与WebApi的区别: 2.2 WebService的优缺点: 2.3 WebApi的优缺点: 3…...
有符号数和无符号数左移和右移
主要是有符号数的左移。 有的说不管符号位,直接左移,所以可以一会正数一会复数 https://bbs.csdn.net/topics/391075092 有的说符号位不动,其他来左移 不明白了。。。。 https://blog.csdn.net/hnjzsyjyj/article/details/119721014 https://…...
Netty小白入门教程
一、概述 1.1 概念 Netty是一个异步的基于事件驱动(即多路复用技术)的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端。 1.2 地位 Netty在Java网络应用框架中的地位就好比,Spring框架在JavaEE开发中的地位。 以下的框架都使用了Nett…...
【逻辑位移和算数位移】
<< 运算符 && >> 运算符 正数位移 当 x>>n 中 x 为正数时,会将x的所有位右移x位,同时左边高位补0 显而易见,运算结束后,值为1 。 可知右移n位,结果就是 x / 2^n:7 / 2 ^2 1;…...
Blender3.5 边的操作
目录 1. 边操作1.1 边的细分 Subdivide1.2 边的滑移 Edge Slide1.3 边的删除1.4 边的溶解 Dissolve1.5 边线倒角 Bevel1.6 循环边 Loop Edges1.7 并排边 Ring Edges1.8 桥接循环边 1. 边操作 1.1 边的细分 Subdivide 在边选择模式,选中一条边,右键&…...
Java与Python、Node.js在人工智能和区块链应用程序开发中的比较
背景 Java、Python和Node.js都是常用的编程语言,它们在不同领域都有广泛的应用。在人工智能和区块链应用程序开发中,这三种语言都具有各自的优势和劣势。 Java的优势 Java在企业级应用中应用广泛,这得益于其跨平台性、安全性和稳定性等特点。在人工智能和区块链应用程序开…...
【计算机是怎么跑起来的】基础:计算机三大原则
【计算机是怎么跑起来的】基础:计算机三大原则 计算机的三个根本性基础1.计算机是执行输入,运算,输出的机器输入,运算,输出 2. 软件是指令和数据的集合指令数据 3. 计算机的处理方式有时与人们的思维习惯不同对计算机来…...
NXP公司LPC21XX+PID实现稳定温度控制
本例使用的是LPC21XX系列芯片提供的PWM功能实现稳定的温度控制。首先我们获得当前环境温度之后,再用设定的温度与当前温度相减,通过PID算法计算出当前输出脉宽,并将其输出到L298N模块中,使加热丝发热,形成闭环…...
【CE实战-生化危机4重置版】实现角色瞬移、飞翔
▒ 目录 ▒ 🛫 导读需求开发环境1️⃣ CE扫描内存,定位坐标地址(加密后的地址)2️⃣ 硬件写入断点,定位真实坐标地址内存写入断点,定位到访问地址分析代码...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...
