计算机中减法的实现原理

补码原理深度解析:从模运算到硬件实现,理解计算机减法本质 在计算机体系结构中,二进制数的表示与运算是基础核心。为了在硬件层面统一运算逻辑,计算机科学引入了模运算的概念,即在固定位宽下,数值运算结果超出范围时自动回绕。基于这一原理,补码表示法应运而生,它巧妙地将减法运算转化为加法操作,极大地简化了算术逻辑单元的设计。从技术价值看,补码不仅实现了有符号数与无符号数运算的硬件统一,还提供了溢出检测的自然机制。在嵌入式系统、数字电路设计及底层编程等应用场景中,深入理解补码的两种等效计算方式——原码取反加1与模减原码——及其背后的环形计数模型,对于优化算法、调试硬件和编写高 阅读详情

这本来就是大一的时候就开始学习的,但是之后一直没再接触。一接触但有概念而没有一个清晰的过程,所以再次缕清了后记录一下博客。本文重点阐明了计算机中减法运算的实现以及反码、补码的意义。
对于加法来说,计算机很容易实现,

举例:8 + 6 = 14;
在计算机中,也就是
0000 1000
0000 0110
.------------------------
0000 1110

0000 1110表示的则就是14. 没毛病

那么减法呢?

举例: 8 - 6 = 2;
在计算机怎么实现?
首先int型在当前的计算机中大多数是占了32位,这里我们为了简便,就当作8位来处理(注意最高位是符号位,也就是8位的数据表示范围是:-128~127)

在计算机的逻辑运算单元中,只有加法运算器,用来对两个数进行相加,并没有减法器的电路。因为对于减法运算,计算机也是用加法器来实现的,比如8 - 6,也可以表示成 8 +(-6),这样就变成了加法运算,问题变成了怎么让计算机表示出负数,有的朋友可能想:6是0000 0110,变成负数后不就是1000 0110了么,这的确没错。但是这样的表示并不能被加法器所支持,加法器是不知道负数的,尽管我们把最高一位定义成了符号位。
8的二进制是 0000 1000
-6的二进制是1000 0110
0000 1000
1000 0110
.--------------
1000 1110

而1000 1110表示的是-14,这显然不是我们要的结果。

那么换一个思路,我们知道,现在我们举例的是8位数,最高的表示是127.

举个时钟的例子。数字时钟上最大值是24点,这里的24点就是模。当到24点的时候,被取模后成为了0点。而减去1点和加上23点的效果都是一样的,无非就是补数和取模。24+23了后取模也是23,都是表示23点。

所以8 - 6就跟 8 + (128 - 6)是一样的。(这里的128是模)

于是乎,减法是可以被当作加法来运算的。

所以计算机便有了反码的概念。正数的反码是自身,负数的反码则是除了符号位之后其他都取反(就相当于自己去加上摸之后取模后的结果)。

但是反码后有一个问题,就是关于“0”的表示,那就是1000 0000和0000 0000都表示0,分别表示 +0 和 -0,而数学意义上并没有正负之分。所以必须消除其中一个

于是有了补码的概念。正数的补码还是原码,负数的补码是原码在得到反码后再+1,

让0只有在0000 0000的时候才表示0。
而1000 0000表示 -128,(注意,-128是通过反码后的-0再加1得到的,-128是没有反码的。PS:正因如此,所以上文才说8位的数据表示范围是:-128~127,而不是从-127开始)

于是乎 上面的 8 - 6 = 8+(-6)的问题

8的原码、反码、补码都是原码:0000 1000
而-6的原码是 1000 0110
反码则是除符号位外,其余位取反:1111 1001
补码则是反码+1,即: 1111 1010
于是两个补码相加:
0000 1000
1111 1010
.---------------------
0000 0010

0000 0010则是2, 正是 8 - 6的结果。

到这里已经说明了减法的实现,其实也就是利用反码和补码的机制,以转换成加法运算。

而这还没完呢,我们再来看一个例子:
6 - 8 = -2

这还不简单? 6 - 8就等于6 + (-8)嘛,于是:
6的原码、反码、补码都是原码:0000 0110
而-8的原码是 1000 1000
反码则是除符号位外,其余位取反:1111 0111
补码则是反码+1,即: 1111 1000
于是两个补码相加:
0000 0110
1111 1000
.---------------------
1111 1110

天哪,1111 1110的十进制数是-126啊,6 - 8怎么可能等于-126呢。

显然,我们这个减法当作加法来运算貌似不是特别靠谱。只要当被减数的绝对值小于减数的绝对值的时候,计算出来的结果总是不对。

当然了 不对是正常的,因为我们是用补码来计算,计算的结果也不是原码。这里因为符号位也参与了计算,所以最高一位并不是表示符号位了,1111 1110则是254了。想想?254 - 256 = -2,刚好是6 - 8的结果。这绝对不是偶然。

我们把1111 1110求一次补码,先取得其反码是: 1000 0001
则其补码则是:1000 0010

天呐,1000 0010则就是-2,太神奇了。

所以计算机的减法运算中,运算的结果是需要再求一次补码的

在前一个例子8 - 6的2,是因为2是正数,反码、补码与原码都一样

最后总结一下:
概念:
原码:带符号位的,我们表示的数值
反码:正数的反码是原码,负数的反码是除了符号位之外其余位取反
补码:正数的补码是原码,负数的补码是反码+1

减法运算:
通过反码的方式来将减法转换成加法运算,通过补码的方式消除了+0和-0的歧义。而在减法的运算结果中,还需要对结果进行补码。

作者:lc_miao的博客
来源:优快云
原文:https://blog.youkuaiyun.com/lc_miao/article/details/84929497
版权声明:本文为博主原创文章,转载请附上博文链接!

补码原理深度解析:从模运算到硬件实现,统一计算机加减法 在计算机体系结构与数字电路设计中,二进制数的表示与运算是基础核心。为了在硬件层面高效实现算术运算,特别是统一加法与减法操作,引入了补码这一关键概念。其数学本质是模运算,即在固定位宽(如8位、16位)的系统中,所有运算都在一个模数(如2^8=256)的循环范围内进行。通过‘模减原数’的数学定义,可以推导出‘取反加一’这一等效且硬件友好的实现方式,使得减法A-B可以转化为A加上B的补码来完成。这一原理的技术价值在于极大简化了中央处理器运算器的设计,无需独立的减法器,仅用加法器配合取反、加一电路即可完成所有加减运 阅读详情

相关推荐

避开新手第一个坑:手把手教你正确安装Perforce服务器与客户端(P4d/P4V)

本文详细指导如何正确安装和配置Perforce服务器与客户端(P4d/P4V),避免新手常见的安装顺序错误。从环境准备到分步安装,再到常见问题排查和性能优化,帮助开发者快速搭建稳定的版本控制环境,提升团队协作效率。

weixin_26804345的博客 658

计算机中的减法——原码,反码和补码

计算机中的减法 首先,介绍根据位运算衍生出的三个概念: 原码:带符号位的,二进制表示的数值 反码:正数的反码是原码,负数的反码是除了符号位之外其余位取反 补码:正数的补码是原码,负数的补码是反码+1 (补码+1是为了在二进制计算中消除-0,因此负数的表示要加1。具体参见相关书籍) 不严谨的说,计算机处理器没有加法引擎,减法是通过加法实现的。 在计算机中,两个数的减法是: 第一个数和第二个数的...

优快云SJTU的博客 4095

基于AMD AU15P FPGA的SLVS-EC桥PCIe设计方案分享

各位FPGAer周末愉快,今天熊猫君分享一个基于AMD AU15P FPGA的SLVS-EC桥PCIe设计方案。

haoxingheng的专栏 1445

计算机组成原理测试习题集2

1.某机用32位表示一个数,阶码部分占8位(含一个符号位),尾数部分占24位(含一个符号位)。设X1=-256.5,X2=127/256,试写出X1和X2的两种浮点数表示格式。2.浮点数的表示范围(阶码、尾数均为8位,包含1个符号位)3.“溢出判断方法”分析4.补码加、减法的实现逻辑”分析5. x= - 0.1101,y= - 0.1011,求[x * y]原。

m0_54158068的博客 1751

22版本Altium Designer导出生产文件的规范化操作指南

本文详细介绍了PCB设计中的Gerber文件导出流程及相关文件生成方法。主要内容包括:1)Gerber文件导出的5个关键设置步骤;2)NC钻孔文件的导出方法;3)坐标文件的生成方式;4)文件打包规范要求必须包含Gerber文件、NC钻孔文件和坐标文件;5)文件提交的两种方式(新手推荐提交原始工程文件,量产推荐仅提交Gerber文件包)。文章还特别强调了单位一致性、精度验证等注意事项,为PCB设计文件的规范输出提供了完整指导。

qq_56506325的博客 1055

用Arduino和FS-i6X遥控器,从零开始打造你的第一只仿生扑翼蝴蝶(附完整代码解析)

本文详细介绍了如何利用Arduino和FS-i6X遥控器从零开始制作仿生扑翼蝴蝶,包括硬件准备、电路连接、代码解析和调试技巧。通过完整的代码示例和参数说明,帮助读者快速掌握仿生机器人的制作要点,实现蝴蝶的自然飞行效果。

weixin_28727975的博客 309

计算机基础——补码原理

补码的原理用一句话来说:减去一个数,等于加上这个数的补数。 补码 计算机中,只能使用二进制的0与1进行数据的存储与运算。8位二进制的数表示的数值范围为:0000000011111111,即0255,但是会有个问题,负数如何表示呢?这时候就需要符号位出场了。 计算机中规定,第一位是符号位,其中0代表正,1代表负,剩下的位才表示数值。对于8位二进制数,第一位表示数字的正负,剩下的7位表示实际的数值大小。 原码:符号位与实际数值的结合表示。正数的符号位为0,数值部分就是数字的绝对值大小;负数的符号位为1,数值部分

勤奋猫的博客 1万+

具身智能与空天具身智能:从理论到实践的AIBOX技术革命

本文深入探讨了具身智能从理论到实践的发展,重点介绍了AIBOX技术如何作为边缘智能计算模块,为无人机、机器人等无人系统提供可进化的“大脑”。文章通过空天具身智能等应用场景,阐述了AIBOX在实现感知、决策、行动一体化闭环中的核心作用,并展望了其在协同智能与规模化部署中的未来挑战与机遇。

lll78的博客 765

计算机实现原理专题--二进制减法器(一)

先说说十进制减法,当被减数各列比减数各列小时,就需要从高位借个1过来,比如110-21=89,由于0小于1因此从上一位借1变成10-1=9,然后高位变成10-2=8,最终结果就是89。 假设最多是3位数的减法,为了不产生借位可将原表达式变成a-b=a-b+1000-1000=a-b+999+...

chengli6223的博客 2666

基于Python的房地产评估数据抓取与分析 —— 房价走势与市场报告

在房地产行业中,了解和分析房产价格的变化趋势、各个地区的房价差异以及市场评价报告,可以帮助投资者、购房者以及政策制定者做出更加明智的决策。本文介绍了如何使用Python爬虫技术抓取房地产平台上的房产评估报告、价格走势等数据,并对抓取的数据进行分析。通过这些技术,您可以自动化抓取房地产平台的数据,分析房价走势,获取市场报告,为房地产投资决策提供数据支持。假设我们要从链家网抓取某个房产的价格、房产描述以及历史成交价格,首先需要获取目标房产页面的URL,并发送HTTP请求。伪装为常见浏览器,避免被识别为爬虫。

2201_76125261的博客 846

ImportError: DLL load failed while importing _pydantic_core: 找不到指定的程序对应解决方案

本文主要介绍了ImportError: DLL load failed while importing _pydantic_core: 找不到指定的程序对应解决方案,希望能对使用Python的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 19万+

计算机组成原理实验八报告,计算机组成原理实验报告-八位补码加减法器的设计与实现.docx...

计算机科学与技术学院计算机组成原理实验报告书实?验?名?称班级学号姓名指?导?教?师日期成绩八位补码加/减法器的设计与实现实验?1?八位补码加/减法器的设计与实现一、实验目的1.掌握算术逻辑运算单元(ALU)的工作原理。2.熟悉简单运算器的数据传送通路。3.掌握?8?位补码加/减法运算器的设计方法。4.掌握运算器电路的仿真测试方法二、实验任务1.设计一个?8?位补码加/减法运算器(1)参考图?1,...

weixin_33419842的博客 1096

redhawk如何看高toggle rate instance

1.图形界面View-Power Map - Toggle Map of Instances。redhawk通过报告和图形界面两种方式查看高toggle rate的instance。2.看warning log,在adsRpt/Warn里,搜toggle rate。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 609

计算机组成原理-加减法器实现教程

计算机组成原理-加减法器实现教程 去发现同类优质开源项目:https://gitcode.com/ 本文档提供了使用Logism工具来构建计算机组成原理中加减法器的详细教程。通过该资源文件的学习,您可以深入了解计算机组成原理中基础的加减运算单元是如何设计的,以及其在计算机系统中的作用和重要性。 资源内容概述 教程文档:详细的步骤指南,介绍如何使用Logism进行加减法器的设计与模拟。 设计示例:...

gitblog_06788的博客 446

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

计算机实现原理专题--二进制减法器(三)

在计算机实现原理专题--二进制减法器(二)中指出当时的减法器需要人工判断被减数和减数的大小,如果能让计算机来自动判断就更好了。实际上计算机采用了补码来表达有符号数,在之前的java整形数值表示--基础中就说明了,采用补码可将减法变成加法。 对于正数而言它的补码就是原码如21=0001_010...

chengli6223的博客 1048

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

计算机组成原理实验补码加法器,2020计算机组成原理实验报告-八位补码加减法器的设计与实现.docx...

计算机科学与技术学院计算机组成原理实验报告书实 验名称 八位补码加/减法器的设计与实现班级学号姓名指导教师日期成绩实验1八位补码加/减法器的设计与实现一、实验目的1 ?掌握算术逻辑运算单元(ALU)的工作原理。熟悉简单运算器的数据传送通路。掌握8位补码加/减法运算器的设计方法。掌握运算器电路的仿真测试方法二、实验任务设计一个8位补码加/减法运算器(1)参考图1,在QLARTUS II里输入原理图,...

weixin_34986860的博客 2382

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

计算机组成原理:计算机采用补码的原因及减法的加法实现

计算机采用补码的核心目的是简化硬件设计,通过加法电路同时实现加减运算。补码利用模运算原理,将减法转换为加法(如a-b=a+(256-b))

zhangyouzhi_lxl的博客 330

【计算机组成原理】补码加减法的实现逻辑框图

对书上补码加、减法的实现逻辑图写一些自己的理解 如图所示 设字长为n位,两个操作数分别为: [x]补=x0.x1 x2 x3 x4……xn-1 [y]补=y0.y1 y2 y3……yn-1 当P为0时,Cn为0,所有的异或门不启动,所有位数对应相加,最后和进位相加,得到本位的S,溢出判断由V确定,V由两个数异或确定,可以列真值表,发现只有两种情况会是溢出一个是10还有一个是01。 X0 Y0 C1 V 0 0 0 0 0 0 1 ...

小呆呆的博客 3111

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我们可以人为的判断被减数和减数的大小,所以当被减数大于减数时中间结果一定会上溢也就是多出1位,因此中...

chengli6223的博客 2948

计算机组成原理八位全加器,计算机组成原理实验报告-八位补码加减法器的设计与实现.docx...

文档介绍:计算机科学与技术学院计算机组成原理实验报告书实验名称班 级学 号姓 名指导教师日 期成 绩八位补码加/减法器的设计与实现实验1八位补码加/减法器的设计与实现一、实验目的1.掌握算术逻辑运算单元(ALU)的工作原理。2.熟悉简单运算器的数据传送通路。3.掌握8位补码加/减法运算器的设计方法。4.掌握运算器电路的仿真测试方法二、实验任务1.设计一个8位补码加/减法运算...

weixin_31520593的博客 1835

我的世界乘法计算机,我的世界计算器减法乘法除法实现方法原理解析

我的世界里面玩家可以通过各种电路实现电路设备,其中包括自动贩卖机以及计算器等等,最近有玩家研究出了4bit减法乘法和除法的计算实现方法,有兴趣可以参考参考。计算器减法乘法除法实现方法原理解析1、二进制4bit减法器(可算负数):首先是成品图:正面图~“L”中间的灯是负数指示结构图~电路图原理:减法器就是取“减数”的补码进行加法计算,然后分两种情况:不为负数:直接输出结果;为负数:取结果的补码输出。...

weixin_35911221的博客 664

原、反、补码之间的相互转换以及计算机硬件实现有符号数、无符号数、定点小数、定点整数的加减法运算

计算机硬件如何做补码的加法:从最低位开始,按位相加(符号位参与运算),并往更高位进位。计算机硬件做有符号整数的加减法运算时,一般使用补码进行运算,原码运算不方便;计算机硬件如何做无符号整数的加法:从最低位开始,按位相加,并往更高位进位;原因:加法电路造价便宜,减法电路造价昂贵,将减法转变为加法,更加省钱。①“被减数”不变,“减数”全部位按位取反、末位+1,减法变加法;②从最低位开始,按位相加,并往更高位进位;② 从最低位开始,按位相加并往更高位进位;按位取反末位+1,减法变加法;①“被减数”不变,“减数”

心碎烤肠的博客 877

计算机内减法的运算

减法的运算法则: 进行取补码的操作,然后相加 (一)无符号 int 减法 unsigned int a=4; unsigned int b=3; unsigned int c=a-b; a减b相当于a加b的补码 b:0000 0000 0000 0000 0000 0000 0000 0011 减法,b取补码:1111 1111 1111 1111 1111 1111 1111 1101 a:0...

藏经阁 4287
上一篇: 浅谈数据结构和数据类型
下一篇: linux基础——linux进程间通信(IPC)机制总结
csshuke
博客等级 码龄16年 1517粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值