“第五十五天”

        定点数

原码的乘法:

        乘法的符号位是单独处理的(通过对被乘数和乘数的符号位进行异或实现),数值位去绝对值进行运算。这里的乘法实际上是通过多次加法实现的。

这里被乘数是放在x寄存器,乘数放在MQ寄存器里,乘法运算的实现是第一次乘数的最低一位乘以被乘数然后放在ACC里,然后ACC和MQ里面的数据都右移,ACC空出的高位补零,MQ空出的高位由ACC移出的低位补上,MQ移出的低位舍弃(所以说ACC中存放的是乘积高位,MQ中存放的乘数和乘积的低位),然后这样MQ中的最低位就变成了要参加乘法的下一位,在再次运算之后(除第一次外)运算结果和ACC里存放的值相加然后再放入ACC中(注意刚才ACC移位的目的)。这样通过先加法再移位的反复操作,直到MQ的最后一位是乘数的符号位则结束运算(乘数的符号位不用参与运算),这里最后还要对乘积的符号位进行修改。

这里还有个手算模拟,应该是会考,可以先看看。

        补码乘法运算:Booth算法

补码一位乘法:进行n轮加法,移位,最后要再多一次加法;(多的这一次就是符号位的运算

每次加法加的可能是 0  ,x的补码 ,(-x)的补码。

而且相比于原码移位是逻辑移位(补0),补码的移位是算数移位,而且符号位参与运算。

补码的算术右移符号位是不动的,数值位右移,高位补的和符号位一致。

至于究竟加什么,由MQ中的最低位和辅助位来确定。

辅助位 - MQ最低位 = 1时,加x的补码;  = 0 时 加 0   ;= -1时加(-x)的补码。

对于补码的话,加法器的各个寄存器就多了一位,MQ中的用来当辅助位,而ACC和X中的被用来当双符号位。辅助位的值是会改变的,除了初始为0,后面由右移从乘数移出的低位代替

        除法运算

恢复余数法:

原码的除法的符号位也是单独处理,通过异或实现,数值位取绝对值进行运算,乘法是ACC加上运算结果,除法是ACC减去运算结果。

在运算的时候计算机会在MQ的最低位先商 1 ,如果这个时候被除数(余数,第一次被除数,后面的都是余数)与除数相减之后得到的值小于 0 (符号位为1),就会改商值为 0 ,然后 恢复余数 (把现在这个相减之后小于 0 的余数在加上除数,得到的就是之前的那个余数),注意这个虽然是原码的除法,但在减去除数的时候,用的是 (-|y|)的补码,在恢复余数的时候加的是 |y|的补码。

之后的每一次都是ACC,MQ整体“逻辑左移”,ACC的高位丢弃,MQ低位补0,然后MQ的最低位商1/0,得到余数,余数末位补0,这里要注意的是如果最后一步商的余数为 负 ,也是需要恢复余数,并改商为 0 的 。这里ACC在每一次运算之后存储的余数的最高位好像一定是 0 ,所以不会出现精度丢失的问题,要是丢了也不能叫精度丢失了,重大事故了就,不过没有具体验证。

然后这里也有原码除法的恢复余数法的手算,可以尝试一下。

        原码除法:

加减交替法/不恢复余数法

 上面这张图是下面这种图为什么可以这样处理的原因。这里其实也蛮巧妙的额,不过更像是由数据得出的结果,而非逻辑的推理。

加减交替法和恢复余数法的区别在于,回复余数法是先商值然后再确定余数的,根据余数的值再反过来确定商值是否正确,而恢复余数法则是先计算余数,根据余数的正负来判断商0/1,然后根据余数的正负对余数进行处理得到下一个新余数,然后再根据这个新余数的值确定下一位商值,这样重复直至得出结果,这里如果最后的出的余数为负,则再商0之后,还需要对余数再处理一下(加 |y| 的补码,就是恢复余数的那个东西)得到正确的余数。

        补码除法: 加减交替法

补码的除法和乘法符号位都参与运算,且被除数/余数和除数都采用双符号位。

补码的乘法的右移是算数右移,而补码的除法的左移是逻辑左移,不过好像补码的逻辑左移和算数左移是一样的,都是低位补 0 .

补码除法的运算规则是:

被除数和除数同号的时候,被除数减去除数,异号则加上除数,注意这里还没有开始商,商值是从第一个余数开始的

余数和除数同号时,商 1 ,余数左移一位减去除数;异号时,商 0 ,余数左移一位 加上除数。重复数值位位数。

补码除法的商值末位商恒置为 1 。

这道题怎么说呢,好像也不难,但让我感觉不舒服。下面的两种都是我写的,一个很长,一个很短...

int main()
{int n = 0;scanf("%d", &n);int i = 0;for (i = 2; ; i++){if (n % i == 0){printf("%d", n / i);break;}}return 0;
}
int main()
{int n = 0;scanf("%d", &n);int i = 0;int max = 0;for (i = 1; i <= sqrt(n); i++){if (n % i == 0){int j = 0;int flag = 1;for (j = 2; j <= sqrt(i); j++){if (i % j == 0){flag = 0;break;}}if (flag){int m = n / i;for (j = 2; j <= sqrt(m); j++){if (m % j == 0){flag = 0;break;}}if (flag){int a = m > i ? m : i;max = max > a ? max : a;}}}}printf("%d", max);return 0;
}

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

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

相关文章

【音视频|wav】wav音频文件格式详解

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

洛谷 B2009 计算 (a+b)/c 的值 C++代码

目录 题目描述 AC Code 切记 题目描述 题目网址&#xff1a;计算 (ab)/c 的值 - 洛谷 AC Code #include<bits/stdc.h> using namespace std; int main() {int a,b,c;cin>>a>>b>>c;cout<<(ab)/c<<endl;return 0; } 切记 不要复制题…

Netty复习:(2)IdleStateHandler的用法

一、handler定义&#xff1a; package handler;import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter;public class MyChatServerHandler3 extends ChannelInboundHandlerAdapter {Overridepublic void userEventTriggered(…

Pytorch指定数据加载器使用子进程

torch.utils.data.DataLoader(train_dataset, batch_sizebatch_size, shuffleTrue,num_workers4, pin_memoryTrue) num_workers 参数是 DataLoader 类的一个参数&#xff0c;它指定了数据加载器使用的子进程数量。通过增加 num_workers 的数量&#xff0c;可以并行地读取和预处…

分布式:一文吃透分布式锁,Redis/Zookeeper/MySQL实现

目录 一、项目准备spring项目数据库 二、传统锁演示超卖现象使用JVM锁解决超卖解决方案JVM失效场景 使用一个SQL解决超卖使用mysql悲观锁解决超卖使用mysql乐观锁解决超卖四种锁比较Redis乐观锁集成Redis超卖现象redis乐观锁解决超卖 三、分布式锁概述四、Redis分布式锁实现方案…

Linux 文件系统简介

文章目录 一、磁盘简介1.1 简介1.2 机械硬盘与固态硬盘1.2.1 机械磁盘&#xff08;HDD&#xff09;1.2.2 固态磁盘&#xff08;SSD&#xff09;1.2.3 I/O操作 二、文件系统简介2.1. 简介2.2 文件系统特点2.3 Linux文件系统 三、文件数据存储方式3.1 连续存储3.2 链接表存储3.3 …

前端知识与基础应用#2

标签的分类 关于标签我们可以分为 &#xff1a; 单标签&#xff1a;img, br hr 双标签&#xff1a;a&#xff0c;h,div 按照属性可分为&#xff1a; 块儿标签&#xff08;自己独自占一行&#xff09;&#xff1a;h1-h6, p,div 行内&#xff08;内联&#xff09;标签&#xff08…

One-to-N N-to-One: Two Advanced Backdoor Attacks Against Deep Learning Models

One-to-N & N-to-One: Two Advanced Backdoor Attacks Against Deep Learning Models----《一对N和N对一&#xff1a;针对深度学习模型的两种高级后门攻击》 1对N&#xff1a; 通过控制同一后门的不同强度触发多个后门 N对1&#xff1a; 只有当所有N个后门都满足时才会触发…

3.5每日一题(求齐次方程组的特解)

1、判断类型选择方法&#xff1a;看出为齐次方程&#xff08;次幂都一样&#xff09; 2、 化为变量可分离&#xff1b;按变量可分离的方法求出通解&#xff08;此题等式两边同时除以 x &#xff09; 3、把x1&#xff0c;y0带入通解&#xff0c;定常数C&#xff0c;求出特解 …

用大白话聊聊SpringBoot的自动配置原理(面试题详解)

首先&#xff0c;SpringBoot的自动配置不等于自动装配&#xff01; 自动配置是Auto-Configuration&#xff0c;针对的是SpringBoot中的配置类&#xff0c; 而自动装配是Autowire&#xff0c;针对的是Spring中的依赖注入。 进入主题&#xff1a; 自动配置简单来说就是自动去把…

java八股文(基础篇)

面向过程和面向对象的区别 面向过程&#xff1a;在解决问题时&#xff0c;特别自定义函数编写一步一步的步骤解决问题。 面向对象&#xff1a;其特点就是 继承&#xff0c;多态&#xff0c;继承&#xff0c;在解决问题时&#xff0c;不再注重函数的编写&#xff0c;而在于注重…

Spring Boot 3系列之一(初始化项目)

近期&#xff0c;JDK 21正式发布&#xff0c;而Spring Boot 3也推出已有一段时间。作为这两大技术领域的新一代标杆&#xff0c;它们带来了许多令人振奋的新功能和改进。尽管已有不少博客和文章对此进行了介绍&#xff0c;但对于我们这些身处一线的开发人员来说&#xff0c;有些…

【Linux】从零开始学习Linux基本指令(三)

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;Linux入门 &#x1f525;该文章主要了解Linux操作系统下的基本指令。 ⚡️该篇为Linux指令部分的终章&#xff0c;如果您想了解前两篇文章的…

【Docker】Linux网络命名空间

命名空间 Namespace是Linux提供的一种对于系统全局资源的隔离机制&#xff1b;从进程的视角来看&#xff0c;同一个namespace中的进程看到的是该namespace自己独立的一份全局资源&#xff0c;这些资源的变化只在本namespace中可见&#xff0c;对其他namespace没有影响。容器就…

Linux学习第26天:异步通知驱动开发: 主动

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 在正式开启今天的学习前&#xff0c;讲一讲为什么标题中加入了【主动】俩字。之前学习的阻塞和非阻塞IO&#xff0c;都是在被动的接受应用程序的操作。而今天的学…

rust入门

目录 一&#xff0c;输入输出 二&#xff0c;函数 1&#xff0c;main函数 2&#xff0c;普通函数 3&#xff0c;库函数 4&#xff0c;常用库函数 三&#xff0c;变量 1&#xff0c;变量绑定、let、mut 2&#xff0c;变量作用域 四&#xff0c;数据结构 1&#xff0c…

风云七剑攻略,最强阵容搭配

今天的风云七剑攻略最强阵容搭配给大家推荐以神仙斋减怒回血为主的阵容。 关注【娱乐天梯】&#xff0c;获取内部福利号 首先&#xff0c;这个角色在这个阵容当中&#xff0c;所有的角色当中&#xff0c;他的输出系数是最高的&#xff0c;已经达到了200%的层次&#xff0c;而且…

商业模式画布的9大模块全解读,产品经理不可不知!

“商场如战场”&#xff0c;在当今瞬息万变的商业环境中&#xff0c;创造出独特且创新的商业模式是每个企业家、策略家和决策者的首要任务。为了在激烈的市场竞争中取得优势&#xff0c;我们需要一个强大且直观的工具来帮助我们规划和塑造公司的商业模式&#xff0c;这个经常被…

H5游戏源码分享-跳得更高

H5游戏源码分享-跳得更高 控制跳动踩到云朵上 <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8"><meta http-equiv"Content-Type" content"text/html;"&g…

【.NET Core】创建一个在后台运行的控制台程序(ConsoleApp)

文章目录 1. 添加Nuget包2. 修改Program.cs3. 添加TestService 借助.NET的通用主机&#xff08;IHostBuilder&#xff09;可以轻易创建一个可以执行后台任务的程序 1. 添加Nuget包 Microsoft.Extensions.Hosting 2. 修改Program.cs 通过Host获取IHostService&#xff0c;然…