有符号数的运算方法

Verilog学习笔记——有符号数的乘法和加法      有符号数的计算在 Verilog 中是一个很重要的问题(也很容易会被忽视),在使用 Verilog 语言编写 FIR 滤波器时,需要涉及到有符号数的加法和乘法,在之前的程序中我把所有的输入输出和中间信号都定义成有符号数,这样在计算时没有出现问题(实际在之前的程序中遇到了有符号和无符号数的问题,最后滤波结果不对,博客的程序是已经改正过的),下面... 阅读详情

一.有符号数的加减法

1、符号数与无符号数的人为规定性:

一个数,是有符号数还是无符号数都是人为规定的。进行二进制运算时用无符号数或是补码运算时,结果都是正确的。

10000100+00001110

若规定为无符号数,即 132+146=146D 。

若规定为符号数,则为-124+14=-110,而[-110]补=10010010。解释:10000100是 -124的补码,0001110是14的补码,在机器中运算后得出的结果是[-110]的补码。机器中的有符号数的运算一般就是补码的运算。

2、补码加减法运算

  计算机中,当确定为符号数运算时,符号数一律用补码表示,运算时符号位和数字位一起参加运算。同样,运算结果也用补码表示。

1)两符号数相加公式:

[X+Y]补 (MOD2)=[X]补+[Y]补    //MOD2即 mod 2^n,即丢弃符号位的进位(因为符号位参与运算是补码运算的特点)

2)两符号数相减公式:

[X-Y]补 (MOD2)= [X]补+[-Y]补

 

3.例子:

求3CH-90H。

首先3CH=0011 1100,90H=1001 0000

(1)当为有符号数时,显然这两个数是某两个数的补码。(具体是哪两个数X Y, 需要自己计算)。运算结果也是补码,是X-Y的补码 [X-Y]补。机器只运算到这一步。[X-Y]补 就是运算结果,溢出 进位等标志位也都是这个补码运算过程的结果,由硬件ALU运算。X-Y并不是机器的运算结果,由[X-Y]补求X-Y是在计算机组成原理中由程序员或者编译器完成的工作,对于编译器来说运算结果才是X-Y,编译器属于软件,不属于硬件机器。

 

根据微机中有符号数(补码)的减法公式,[x]补(输入)-[Y]补(输入)=[x]补+[-Y]补(求补操作结果)=[X-Y]补(微机运算结果) ,求[-Y]补是关键。

[x]补=0011 1100,[Y]补=1001 0000,

[-Y]补=[Y]补的 求补=0110 1111(取反)+1(加一)=0111 0000  //不是[Y]补的补码!!更不存在什么 -[Y]补 的补码(不存在-[Y]补这种写法)

 解释求补操作:  

无论-[Y]补的符号位是0还是1。正数也可以有求补操作,只是得到的数不叫补码,就是为了把减法转换成加法。求补操作 就是取余(求补)(补码是人规定的,但是求补是数学定义)。证明[-Y]补=对-[Y]补 求补操作:[0]补=[-x]补+[X]补 。[-x]补和[X]补不是正数和负数的关系!!而是互补关系,算数相反,不是逻辑相反。另外仔细想一下,我们学补码是为了什么?以前是为了求一个原码的补码是什么,因为计算机组成原理中 从编译器到微机 从微机到编译器 需要原码变成补码 补码变成原码,但是在微机原理中,就不需要这一部分了,而是需要 求补操作了。计算机组成原理中,是由y原码求出来的[-y]补,而微机原理中是 对[y]补 求反操作出来的[-y]补,计算过程都不一样。计算机组成原理中的过程可以理解 但是不是微机真正的运算过程,这一次学习的微机原理的补码的加减法才是真的硬件的运算过程!

另外,补充一点,X=[X]补 的补码,由补码求原码时不用按照由原码求补码的逆过程(补码为1000 0000时例外!)。

《微机原理与接口技术》中写道:“由加法器的原理图,加法器的方式控制M用于控制加减法,当M=0时进行S=A+B操作,当M=1时进行S=A-B操作。当M=1(减法)时,各个异或门对B的各位进行求反,并将1作为初试进位加入结果,也就是执行对B的求反加1,即求补操作。” 也就是说!无论B是有符号数还是无符号数,无论符号位是0还是1,只要M=1,就统统对B执行求补操作!!!所以,求补操作可以对符号位是0的数执行!

 

所以,[X-Y]补=0011 1100-1001 0000=0011 1100+0111 0000=ACH

 

(2)补码最大好处就是不管是有符号数还是无符号数都可以用同一套加减法。系统对有符号数和无符号数的加减法都采用一样的策略。

无符号加减法不存在溢出问题,只是将进位或借位存储在CF中。
机器不知道你进行的运算是否有符号,如果你进行的是有符号运算,你需要查看OF,否则不需要。
所以,溢出不溢出,是由程序员判断的,机器不知道。

 

不管是有符号数还是无符号数,微机都是按补码运算,至于是进位还是溢出不仅要看进位标志位,还要看溢出标志位。

只不过在做无符号数运算时程序员不考虑溢出标志位,只考虑进位标志位而已。
比如0111+1101,你说它是无符号数7+13呢,还是有符号数7-3呢?
对微机而言这是一回事!

所以,微机中,无符号数时和有符号数时的运算结果一定是一样的。

 

(3)注意这道题和《计算机组成原理》学补码加减运算时的题目的区别。

例子:X=+0101,Y=-1010,求X-Y。

题目给的X Y,是原码, 所以已经默认是有符号数,也有判断是否溢出,所以默认的计算过程也是指机器运算过程。

原码在机器中 均是以补码保存和运算的,

[x]补-[Y]补=[x]补+[-Y]补=[X-Y]补,只用到了[x]补+[-Y]补=[X-Y]补

属于类型:已知X Y,所以先求[X]补, [-Y]补 ,便求得[X-Y]补。然后求X-Y。

也就是说,上一题已知的是[X]补 [Y]补,(机器的)运算结果是[X-Y]补。中间过程没必要求出X Y是什么数。

本题已知的是X Y,先得出机器的运算结果[X-Y]补,在做编译器的工作由[X-Y]补 求出X-Y。

二者求[-Y]补的方法不一样:前者是对[Y]补 求补操作 求得的,后者是由-Y求得。

可以说,后面例子是编译器和微机共同工作的过程,前面例子只关系微机运算。

Verilog基础知识(有符号数运算规则,加减运算,乘法运算中的符号位拓展问题) rule of thumb The format of the signed type is two’s complement. 有符号数均为补码表示 If any operand in an expression is unsigned the operation is considered to be unsigned. 只有计算表达式右边有无符号数,整个计算式都按照无符号数规则运算 只有... 阅读详情

相关推荐

Verilog实现二进制有符号定点数的乘法运算

Verilog实现有符号数乘法运算二进制运算原理1、无符号二进制数(signed)运算 二进制运算原理 总结最近FPGA的学习,使我明白了一件事:在Verilog程序的编写中,“位”(bit)这一概念,对于程序编写至关重要,Verilog代码中,数据运算均以位来操作,因此我觉得有必要认真研习一下二进制运算的基本过程和运算方法。 有符号二进制数的表示一般以二进制补码(2’comp)的形式来表示,有助于我们理解和编写底层二进制运算的程序。相信这对我们单片机和FPGA的学习将收益匪浅。 1、无符号二进制数(sig

qq_44626493的博客 2万+

为什么8位有符号数的范围为“-128 — +127”?

这是一个困惑了我几年的问题,它让我对现在的教科书和老师极其不满,从我N年前开始摸电脑时,就几乎在每一本C++教科书上都说,8位有符号的取值范围是-128~+127,为什么不是-127~+127呢,后来的java,int的聚值范围,再32位计算,-2^31 ~ +2^31-1,可是,却从来没有任何一本教科书或一个老师比我解释过这个问题。 原因没有在工作上或者是什么地方直接遇到它,所以我也一直忽略它,

scyatcs的专栏 1万+

Verilog 和VHDL有符号数和无符号数相关运算

目录一、Verilog有无符号数运算1.有符号数和有符号数的加减运算(输入和输出为原码)2.无符号数和有符号数的加减运算(输入和输出为原码)3.有符号数和有符号数的乘法(输入和输出为原码)二、VHDL深度讲解二进制无符号和有符号加法处理溢出的问题1.Unsigned adders2.Signed adders2.1 Analysis2.2 Summarystep1:将数据转换为补码。step2:确定输出结果的位宽。 (结果的位宽是在最大的一个数据的位宽基础上加一位。如6bit与3bit进行加减,则结果为7b

yh13572438258的博客 9133

原码、反码和补码

 在计算机内,定点数有3种表示法:原码、反码和补码所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。    反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。1、原码、反码和补码的表示方法(1)    原码

michaelrun的专栏 1196

5.1.4_带符号整数的表示和运算_原反补

计算机组成原理之带符号整数的表示和运算_原反补

人生得意须尽欢 5517

matlab kwave模拟超声换能器学习笔记

kwave模拟超声换能器的学习笔记,从零开始造车轮

SolvingMaster的博客 3197

有/无符号数加减法

有符号数和无符号数运算的位扩展 当所有操作数和结果数据位宽一样时,有符号数和无符号数所产生的运算电路是一样的。 当所有操作数和结果数据位宽不一样时,无符号数进行0扩展,而有符号数进行符号扩展。 在verilog中支持无符号数和有符号数混合使用,当表达式右侧所有数均为符号数时,才进行符号位扩展,否则全部0扩展。 8位有符号数8’b11111000,扩展成9位的有符号数,9’b1_1111_1000,很简单高位补1就行,扩成10位,就补2个1,不影响值。 ...

luoai_2666的博客 8741

机器视觉避坑指南:为什么你的Halcon划痕检测总漏检?(附优化方案)

本文深入剖析了Halcon在表面划痕检测中漏检率高的常见原因,如灰度值波动、噪声干扰及形态学参数设置不当。针对复杂背景与低对比度划痕,提出了超越官方例程的多尺度纹理分析与特征融合优化方案,旨在帮助开发者构建更鲁棒、稳定的机器视觉检测流程,有效提升检出率。

weixin_29057163的博客 234

无符号数和有符号数的运算

最近在书上看到这样一道题,由于知识缺乏导致很难对这道题完全理解和运算,因此在这里分享出来供大家参考。题目如下:c的输出值为多少。

qq_43433724的博客 837

Jaspersoft Studio 6.20.0 免注册安装指南(附下载链接)

本文提供了Jaspersoft Studio 6.20.0社区版的免注册安装详细指南。文章介绍了绕过官网注册获取安装包的多种可靠途径,并逐步详解了从启动安装器到首次运行的全过程,帮助用户快速完成安装与基础配置,高效开启报表设计工作。

mars5的博客 1693

基于STM32设计的遥控灭火消防小车_296

随着城市化进程的加速和火灾发生频率的增加,传统的消防方式在应对初期火灾时存在反应慢、效率低等问题。为了提高火灾响应速度和灭火效率,本设计开发了一款基于STM32单片机的遥控灭火消防小车。该小车配备了烟雾检测、温湿度监测、火源定位、灭火操作等功能,能够通过蓝牙和WIFI实现远程控制与实时视频传输。设计采用了MQ2烟雾传感器、SHT30温湿度传感器、火光传感器和ESP32摄像头模块等硬件设备。系统不仅能够自动检测和定位火源,还可以手动调整灭火器对准位置,进行干粉灭火。此外,蜂鸣器用于火源报警,确保操作人员及时得

722

计算机组成原理4小时速成:计算机运算方法,无符号数和有符号数,定点数和浮点数,移位运算,加减运算,乘法运算,原码,反码,补码

计算机组成原理4小时速成:计算机运算方法,无符号数和有符号数,定点数和浮点数,移位运算,加减运算,乘法运算,原码,反码,补码

weixin_46838716的博客 971

[SoC]SoC验证中bootcode与firmware相关验证经验总结

本文总结了SoC验证中bootcode和firmware的验证经验。重点介绍了两种数据加载方法:1)使用Verilog系统函数$readmemh/$readmemb直接写入ROM/ARAM,需注意文件路径、格式和斜杠方向;2)通过Memory Hierarchy在initial块中操作,需要添加适当延时并注意路径拼接。文章还提供了在testcase phase中先读取数据到HASH再写入SRAM的示例,并强调加载后需使能edc_bypass以避免ECC错误。验证过程中需特别注意文件位置、格式要求及路径处理等

元直的博客 2498

计算机组成原理第六章 计算机的运算方法

举个简单的例子:15m = 1500cm这就代表了15这个数字左移了2两位,左移之后空缺的地方补上了0,这就是移位运算。在十进制中,左移一位,相当于数值大小为原来的10倍,那么在二进制中,左移一位,相当于数值大小为原来的2倍。前面我们知道,计算机中有些二进制数是代表符号位的逻辑移位:无符号位进行移位算数移位:有符号位进行移位。

分享学习期间的笔记心得 2065

HFSS仿真PCB射频通路间的隔离度

本文介绍HFSS方式仿真带有器件的射频通路间的隔离度,可视为CST方式的补充,二者的结果相互参照。在前期靠仿真确认风险点时,可以作为一种较为直观和可信的手段。

sinat_15150363的博客 1524

MVDR算法: 自适应波束形成在信号处理领域中扮演着重要的角色。本文将介绍MVDR(最小方差无失真响应)算法,并提供相应的Matlab源代码实现。

MVDR算法是一种用于抑制干扰信号并增强感兴趣信号的自适应波束形成算法。它的基本思想是通过对干扰信号进行空间滤波,使其在感兴趣信号方向上的输出功率最小化。这种方法可以提高信号的质量和可辨识度,特别是在存在多个干扰源的复杂环境中。本文将介绍MVDR(最小方差无失真响应)算法,并提供相应的Matlab源代码实现。使用MVDR算法,我们可以通过对观测信号进行波束形成来抑制干扰信号并增强感兴趣信号。以上是MVDR算法的Matlab实现。的每一列代表一个阵列元素的观测信号。表示期望的波束指向,即感兴趣信号的方向。

HackWhisper的博客 1245

【机组期末速成】计算机的运算方法|进制转换|无符号数与有符号数|数的定点表示与浮点表示|定点运算

本章主要介绍了计算机组成原理的第6章:计算机的运算方法涉及考点:进制转换|无符号数与有符号数|数的定点表示与浮点表示|定点运算

qq_73017178的博客 1863

Open3D 可视化(1)——简单可视化【2026最新版】

简单可视化,博客长期更新,本文最新更新时间为:2026年5月10日。

点云侠的博客 5685

计算机组成原理计算机的运算方法——无符号数和有符号数

计算机的运算方法——无符号数和有符号数无符号数有符号数机器数与真值源码表示法整数小数补码表示整数小数快速获取补码方法反码表示整数小数快速取反方法移码表示 无符号数 定义:没有正负号的数 寄存器的位数表示了无符号数的表示范围 有符号数 机器数与真值 真值:带符号的数 机器数:符号数字化的数,一般最高位1代表负数,0代表正数 源码表示法 整数 带符号的绝对值表示 小数 原码特点:简单直观 补码表示 整数 小数 快速获取补码方法 符号位不变,数值位取反,最后加1 反码表示 整数 小数 快速取反方法

ChenfengZhang的博客 1883

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

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

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

verilog有符号数使用方法简介

verilog有符号运算简介

MmikerR的专栏 2万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

计算机组成原理 — 计算机的运算方法

大家好呀!我是小笙,本章我主要分享计算机组成原理的输入输出系统知识,主要讲解计算机的运算方法,希望内容对你有所帮助!

Al_tair的博客 1973

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

计算机的运算方法

计算机的运算方法 1丶 无符号数和有符号数 2.丶数的定点表示和浮点表示 3.丶定点运算 1、移位运算 2、加减法运算 3、乘法运算 4、除法运算 4丶浮点的四则运算 一丶无符号数和有符号数 数包括有符号数和无符号数。 -*****************- eg: 机器字长为16为进制的范围。 无符号数:0-65535。【0~(2^16)-1】 有符号数:-32768~32767。【符号位占

RobertChao的博客 5550

verilog中的有符号数运算(转)

verilog中的有符号数运算 有符号数的计算:若有需要关于有号数的计算,应当利用Verilog 2001所提供的signed及$signed()机制。 Ex: input  signed [7:0] a, b; output  signed [15:0] o; assign o = a * b; or input   [7:0] a, b; out

feixiaku的专栏 7009

二进制有符号数补码及运算

二进制补码标准定义中,符号位只有一位--最高位的那一位。特殊的,当补码位数扩展时高位会填充原符号位的值。如-3用4位补码表示为1101,扩展到8位时-3的补码表示为11111101,虽然符号位进行了扩展,但是按补码的标准定义,只有最高位为符号位,其余为数值位,或者说是符号扩展的冗余位。对于N位有符号二进制数,原码可表示的范围为-2⁽ⁿ⁻¹⁾-1~2⁽ⁿ⁻¹⁾-1,补码可表示的范围为-2⁽ⁿ⁻¹⁾~2⁽ⁿ⁻¹⁾-1。例如,对于4位有符号二进制数,原码可以表示的范围为-7~7,补码可以表示的范围为-8~7。

m0_46574518的博客 1547

【计算机组成原理/笔记+习题】第六章 计算机的运算方法

第六章、计算机的运算方法

2202_75354817的博客 1334

计算机组成原理--计算机的运算方法

计算机组成

小马哥的博客 1306
下一篇: 2021-08-02
dropdropjack
博客等级 码龄7年 5粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值