“第五十五天”

news2024/11/16 15:51:41

        定点数

原码的乘法:

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

这里被乘数是放在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.coloradmin.cn/o/1151075.html

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

相关文章

数据结构线性表——顺序表

前言&#xff1a;小伙伴们好久不见&#xff0c;从这篇文章开始&#xff0c;我们就要正式进入数据结构的学习啦。 学习的难度也将逐步上升&#xff0c;希望小伙伴们能够和博主一起坚持&#xff0c;一起加油&#xff01;&#xff01;&#xff01; 目录 一.什么是线性表 二.什么…

便利店超市怎么做一个实用的微信小程序?

近年来&#xff0c;微信小程序商城越来越受到商家的青睐&#xff0c;因为它不仅提供了便捷的在线购物体验&#xff0c;而且不需要安装额外的应用。对于零编程经验的初学者&#xff0c;制作一个小程序商城可能会感到有些困难&#xff0c;但不用担心&#xff0c;本文将引导你一步…

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(…

【实用教程】MySQL内置函数

1 背景 在MySQL查询等操作过程中&#xff0c;我们需要根据实际情况&#xff0c;使用其提供的内置函数。今天我们就来一起来学习下这些函数&#xff0c;在之后的使用过程中更加得心应手。 2 MySQL函数 2.1 字符串函数 常用的函数如下&#xff1a; concat(s1,s2,…sn)字符串…

Ansible的安装和部署

目录 1.Ansible的安装 2.构建Ansible清单 直接书写受管主机名或ip 设定受管主机的组[组名称] 主机规格的范围化操作 指定其他清单文件 ansible命令指定清单的正则表达式 3.Ansible配置文件参数详解 配置文件的分类与优先级 常用配置参数 4.构建用户级Ansible操作环…

女神联盟2攻略,女神联盟2-GM红将全免

女神联盟2攻略&#xff1a;前期过渡阵容建议&#xff1a; 在女神联盟2-GM红将全免的初期玩法中&#xff0c;资源的获取是有限的&#xff0c;因此玩家需要合理运用搭配&#xff0c;避免浪费。同时在有限的资源中与敌人竞争资源需要进行头脑对决。首先&#xff0c;游戏中的硬通货…

Linux学习第27天:Platform设备驱动开发: 专注与分散

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 专注与分散是我在题目中着重说明的一个内容。这是今天我们要学习分离与分层概念的延伸。专注是说我们要专注某层驱动的开发&#xff0c;而对于其他层则是芯片厂商…

【QT】鼠标常用事件

新建项目 加标签控件 当鼠标进去&#xff0c;显示【鼠标进入】&#xff0c;离开时显示【鼠标离开】 将QLable提升成自己的控件&#xff0c;然后再去捕获 添加文件 改继承的类名 提升类 同一个父类&#xff0c;可以提升 效果 现在代码就和Qlabel对应起来了。 在.h中声明&…

1992-2021年全国各地级市经过矫正的夜间灯光数据(GNLD、VIIRS)

1992-2021年全国各地级市经过矫正的夜间灯光数据&#xff08;GNLD、VIIRS&#xff09; 1、时间&#xff1a;1992-2021年3月&#xff0c;其中1992-2013年为年度数据&#xff0c;2013-2021年3月为月度数据 2、来源&#xff1a;DMSP、VIIRS 3、范围&#xff1a;分区域汇总&…

短期经济波动:均衡国民收入决定理论(一

宏观经济学讲义 10 短期经济波动&#xff1a;均衡国民收入决定理论(一) 文章目录 10 短期经济波动&#xff1a;均衡国民收入决定理论(一)[toc]1 均衡国民收入决定1.1 均衡国民收入决定的不同理论1.2 两部门经济&#xff1a;有效需求原理和框架1.2.1 模型假设1.2.2 模型推导1.2…

正点原子嵌入式linux驱动开发——Linux 音频驱动

音频是最常用到的功能&#xff0c;音频也是linux和安卓的重点应用场合。STM32MP1带有SAI接口&#xff0c;正点原子的STM32MP1开发板通过此接口外接了一个CS42L51音频DAC芯片&#xff0c;本章就来学习一下如何使能CS42L51驱动&#xff0c;并且CS42L51通过芯片来完成音乐播放与录…

java八股文(基础篇)

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

EPLAN_012#自定义导航器

关键字&#xff1a;设备导航器、端子排导航器、电缆导航器、设备列表导航器&#xff0c;树形结构&#xff08;导航器&#xff09; 正常情况下&#xff0c;eplan中的设备导航器是这个模样 如何在导航器中显示更多内容或者进行规划。&#xff08;比如下图中&#xff0c;可以显示其…

买车软件有哪些,买车软件哪个好

买车软件是指为购买汽车提供便利的手机应用程序&#xff0c;可以帮助消费者找到心仪的汽车型号、比较不同车型的价格、了解车辆的详细参数和配置、预约试驾、办理贷款、购车保险等一系列服务。 买车软件可以让用户更加便捷地了解汽车信息、比较不同车型的价格和配置、预约试驾…

【STL】:vector的模拟实现

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关vector的模拟实现&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数…

qt 系列(一)---qt designer设计常用操作

最近转战qt, 主要用qt designer 进行GUI开发&#xff0c;记录下实战经验~ 1.前言 qt 是跨平台C图形用户界面应用程序开发框架&#xff0c;可以使用的IDE工具有 qt creator 和 vs, 这里我主要使用 Visual Studio 2017 工具进行程序开发与编写。 2. 环境配置 只写关键步骤~~ …

Java 谈谈你对OOM的认识

文章目录 前言一、基础架构二、常见OOM1、栈内存溢出java.lang.StackOverflowError2、堆内存溢出java.lang.OutOfMemoryError&#xff1a;Java heap space3、GC回收时间过长java.lang.OutOfMemoryError: GC overhead limit exceeded4、NIO程序堆外内存溢出java.lang.OutOfMemor…

MySQL使用存储过程迁移用户表数据,过滤用户名相同名称不同的用户

存储过程简介 存储过程&#xff08;Stored Procedure&#xff09;是一组为了完成特定功能的SQL语句集&#xff0c;经编译后存储在数据库中&#xff0c;用户通过指定存储过程的名字并给定参数&#xff08;如果该存储过程带有参数&#xff09;来调用执行它。它是一段预编译的SQL…

openGauss学习笔记-110 openGauss 数据库管理-管理用户及权限-Schema

文章目录 openGauss学习笔记-110 openGauss 数据库管理-管理用户及权限-Schema110.1 创建、修改和删除Schema110.2 搜索路径 openGauss学习笔记-110 openGauss 数据库管理-管理用户及权限-Schema Schema又称作模式。通过管理Schema&#xff0c;允许多个用户使用同一数据库而不…

为什么 ConcurrentHashMap 中 key 不允许为 null

ConcurrentHashMap 在ConcurrentHashMap 的源码&#xff0c;在 put 方法里面&#xff0c;可以看到这样一段代码&#xff0c;如果 key 或者 value 为空&#xff0c;则抛出空指针异常。 但是为什么 ConcurrentHashMap 不允许 key 或者 value 为空呢&#xff1f; 原因 简单来说&…