原码,补码的乘法运算

目录

一.原码一位乘法

二.补码一位乘法  


一.原码一位乘法

在手算10进制乘法中,我们是这样计算的:

这里的本质是因为:

0.211=2\times 10^{-1}+1\times 10^{-2}+1\times 10^{-3}

0.985=985\times 10^{-3}

所以0.211*0.985=(985\times 1\times 10^{-6})+(985\times 1 \times 10^{-5})+(985 \times 2 \times 10^{-4} )

对应:                     0.000985                        0.00985                        0.1970 

 

手算的2进制中也是如此:

在上述例子中,我们可以看到,0.1101和0.1011这5位的数相乘后得到了0.10001111的9位数,乘积的位数扩大,若计算机只能保存5位数,那么如何处理:

设机器字长为n+1位=5位,[x]原=1.1101,[y]原=0.1011,采用原码一位乘法求x*y

符号位单独处理:符号位=x_{s}\bigoplus y_{s}

数值位取绝对值进行乘法计算:

ACC:累加器,用于存放操作数,或运算结果。

MQ:乘商寄存器,在乘、除运算时,用于存放操作数或运算结果。

X:通用的操作数寄存器,用于存放操作数。

ALU:算术逻辑单元,通过内部复杂的电路实现算数运算、逻辑运算。

在进行乘法运算时ACC存放乘积高位(正式进行乘法之前,ACC置0),MQ存放乘数,乘积低位,X存放被乘数

x=0.1101(被乘数)  y=0.1011(乘数)

运算过程如下:

1.看乘数、乘积低位:当前位=1,则ACC加上被乘数,若当前位=0,则ACC加上0

可以看到当前位为1(加深部分),则将ACC加上被乘数,这个过程由ALU中的加法电路完成

(ACC)+(X)-->(ACC)

00000+01101=01101(放到ACC中)

2.因为第2个位积与第1个位积相加时需要错位,所以将ACC与MQ进行逻辑右移

那么ACC的最低位会移动到MQ的最高位,高位补0,移出的位直接丢弃

由于现在当前位为1,所以将ACC加上被乘数

00110 +01101 = 10011


接下来继续右移

当前为为0,ACC+0-->ACC

继续右移:

ACC+(X)--->ACC

00100+01101=10001

更新完ACC的值后,继续右移:

当前位不用参与运算,因为它是乘数的符号位,最后得到:

0.10001111,即1.1101*0.1011=0.10001111

所以总结运算过程就是:先加法再移位,重复n次(n表示数值位的个数)

3.最后符号位1\bigoplus0=1,所以修改符号位为1,即1.10001111

所以我们可以看到最终ACC存储的是乘积高位,MQ存储乘积的低位

以上运算过程也称原码的一位乘法,因为每次参与运算的位数为1

由机器的过程可以模拟出手算过程如下:

这里由于补码乘法一定要使用双符号位,所以原码乘法中也可以写作双符号位的形式(实际单符号也不会出错):

这一运算过程也可以运用在整数运算中:

1.运算时将.(点)改为,(逗号)

2.最终的点会在红色位置,并非黑色位置

二.补码一位乘法  

补码和原码的区别:

1.原码中进行n轮加法,移位。而补码中进行n轮加法,移位,最后需要多来一次加法

2.原码中,当

MQ中最低位=1时,(ACC)+[|x|]原

MQ中最低位=0时,(ACC)+0

并且每次移位为逻辑右移

补码中,每次加法可能+0,+[x]补,+[-x]补

辅助位-(减)MQ中最低位=1时,(ACC)+[x]补

辅助位-MQ中最低位=0时,(ACC)+0

辅助位-MQ中最低位=-1时,(ACC)+[-x]补

并且每次移位为"补码的算数右移"

3.原码的符号位不参与运算,补码的符号位需要参与运算

具体来看一个例子:

辅助位就是指MQ寄存器新扩展的一位,每次右移会使MQ最低位(深灰色部分)顶替原来的辅助位(红色部分)

这里注意MQ的最低位其实是辅助位,但是这里做了一下区分

因为MQ多增加了一位,所以ACC和X都会多增加一位,可以看到原码的X与MQ是存乘数与被乘数的绝对值,而这里是直接将补码存入:

[x]补=11.0011(被乘数采用双符号位),[y]补=0.1011(乘数采用单符号位,因为MQ的最后一位需要用来存放辅助位

对于+[-x]补码的运算,会有辅助电路完成[x]补到[-x]补的转换

计算过程如下:划下划线的两位前一位是MQ的最低位(Y4),后一位是辅助位(Y5)

我来解释部分运算过程

1.根据以上规则,由于划线部分为1,0,辅助位-MQ最低位=-1,所以+[-x]补,得到运算结果为

00.1101

2.接着进行算数右移,即用与符号位相同的位进行填补,右移结果为00.0110

3.由于划线部分为1,1,辅助位-MQ最低位=0,所以加0

因为有4个数值位,所以需要进行4轮的加法和算数右移,补码需要多进行一次加法(只有加法,没有移位)

最后一次加法划线部分的前一位是符号位,所以才说补码的符号位是需要参与运算的

4.加法得到的数,在拼接上前n位,就得到乘法的运算结果:

[x*y]补=11.01110001

即x*y=0.10001111

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

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

相关文章

【面试突击】硬件级别可见性问题面试实战(下:synchronized和volatile底层对原子性、可见性、有序性的保证)

🌈🌈🌈🌈🌈🌈🌈🌈 欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送! 在我后台回复…

CHS_01.2.2.1+调度的概念、层次

CHS_01.2.2.1调度的概念、层次 调度的概念、层次知识总览调度的基本概念调度的三个层次——高级调度![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/6957fdec179841f69a0508914145da36.png)调度的三个层次——低级调度调度的三个层次——中级调度补充知识&#xff…

9.1 Maven项目管理(❤❤❤❤)

9.1 Maven项目管理 1. Maven介绍2. 创建Maven项目2.1 创建2.2 结构分析3. Maven依赖管理3.1 简介3.2 设置下载镜像仓库4. 本地仓库与中央仓库5. Maven生命周期6. Maven插件技术1. Maven介绍

钡铼 楼宇暖通网关之 BACnet网关在空气源热泵智能控制系统中的应用介绍

前言 在刚刚过去的2023年,空气源热泵市场依然火爆,全线市场销量递增,各种新品层出不穷,市场认可度持续攀升,在整个采暖市场,空气源热泵已然成为当红明星。 热泵组管道比较复杂,传感器分布比较分…

路飞项目--02

补充:axios封装 # 普通使用:安装 ,导入使用 const filmListreactive({result:[]}) axios.get().then() async function load(){let responseawait axios.get()filmList.resultresponse.data.results } # 封装示例:请求发出去之前…

(蓝桥杯每日一题)love

问题描述 马上就要到七夕情人节了,小蓝在这天想要心爱得男神表白,于是她写下了一个长度为n仅由小写字母组成的字符串。 她想要使这个字符串有 1314个 love 子序列但是马虎的小蓝却忘记了当前已经有多少个子序列为 love。 请你帮小蓝计算出当前字符串有多…

【llm 使用llama 小案例】

huggingfacehttps://huggingface.co/meta-llama from transformers import AutoTokenizer, LlamaForCausalLMPATH_TO_CONVERTED_WEIGHTS PATH_TO_CONVERTED_TOKENIZER # 一般和模型地址一样model LlamaForCausalLM.from_pretrained(PATH_TO_CONVERTED_WEIGHTS) tokenize…

pyvisa 打包

pyvisa 打包之后,错误提示: D:\dwp_backup\python study\communication_instrument_visa\dist>"D:\dwp_backup\python study\communication_instrument_visa\dist\EMI_Test_ok.exe" Traceback (most recent call last): File "EMI_…

Java和SpringBoot学习路线图

看了一下油管博主Amigoscode的相关视频,提到了Java和SpringBoot的学习路线,相关视频地址为: How To Master Java - Java for Beginners RoadmapSpring Boot Roadmap - How To Master Spring Boot 如下图所示: 当然关于Java和Spr…

fastjson-BCEL不出网打法原理分析

FastJson反序列化漏洞 与原生的 Java 反序列化的区别在于,FastJson 反序列化并未使用 readObject 方法,而是由 FastJson 自定一套反序列化的过程。通过在反序列化的过程中自动调用类属性的 setter 方法和 getter 方法,将JSON 字符串还原成对…

鸿蒙开发系列教程(五)--ArkTS语言:组件开发

1、基础组件 组件API文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V2/84_u58f0_u660e_u5f0f_u5f00_u53d1_u8303_u5f0f_uff09-0000001427744776-V2 查看组件API 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 容…

状态管理库之 mobx

一文快速上手 mobx! 一、概述 mobx 是一个简单的可拓展的状态管理库,无样本代码风格简约不推荐使用装饰器语法可以运行在任何支持 es5 的环境中,包含浏览器和 node 二、核心概念 2.1 observable 被 mobx 跟踪的状态 2.2 action 通过某个…

【leetcode】回溯总结

本文内容来自于代码随想录https://www.programmercarl.com/ 思想 一棵树中的纵向遍历结束回到上一层的过程,比如: 这个过程通常回伴随恢复现场的过程。 模板 void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集…

如何在Docker下部署MinIO存储服务通过Buckets实现文件的远程上传

📑前言 本文主要是Linux下通过Docker部署MinIO存储服务实现远程上传的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 &#…

Netty-Netty源码分析流程图

netty服务端流程图 补充

线性表--顺序表

目录 1.什么是顺序表 2.动态顺序表实现 2.1动态顺序表结构体 2.2初始化 2.3打印验证函数 2.4判断是否扩容,按需扩容 2.5头插/尾插 2.6头删/尾删 2.7指定位置插入数据/指定位置删除数据 3.动态顺序表代码 1.什么是顺序表 线性表是n个具有相同特性的数据元素的…

Jmeter的文件参数化:CSV数据文件设置和_CSVRead函数

一、CSV数据文件设置 1、简介 CSV数据文件配置(CSV Data Set Config)可以将CSV文件中数据读入自定义变量中 Jmeter中CSV数据文件配置的界面如下图所示: 其中: (1)文件编码 文件的编码格式,与所…

SpringBoot项目整合MybatisPlus并使用SQLite作为数据库

文章目录 SQLite介绍搭建项目创建项目修改pom.xml SQLite查看SQLite是否安装创建数据库创建数据表IDEA连接SQLitenavicat连接SQLite数据库 后端增删改查接口实现MybatisX生成代码不会生成看这个UserUserMapperUserMapper.xml controller创建配置文件application.yaml启动类Incr…

halcon胶水过少检测

简单算法识别胶水不足的情况. dev_set_draw (‘margin’) dev_set_line_width (3) dev_set_color (‘green’) dev_get_window (WindowHandle) set_system (‘filename_encoding’, ‘utf8’) list_files (‘胶水污染残缺’, [‘files’,‘follow_links’], ImageFiles) tuple…

AI短视频制作:创意与技术的完美结合

文章目录 一、充分了解AI技术的应用范围和优势二、创意策划,确定作品主题和风格三、素材收集,丰富作品内容四、特效制作,提升作品视觉效果五、配音处理,增强作品表现力六、作品发布,扩大作品传播范围《AI短视频制作一本…