原码不恢复余数除法

只讲运算,不讲运算原理


方法

1. 取被除数x和除数y的绝对值,y的(-y)补

2. 第一次因为被除数是绝对值,所以肯定是正数,必须要+(-y)补

3..运算加减时,遵循的规则:

先左移一位,C和A并行,要一起移动
当余数为正时,加(-y)补,C的末尾添加1
当余数为负时,加|y|,C的末尾添加0

4. 求x或y的最高次数位,有几位循环几次,商就有几位,最后如果余数位负数,需要增加一步恢复余数,保证余数位正

5. 符号位异或运算,确定最后的符号位


示例:x / y = C

x = -0.0110(真值)
y =  0.1100(真值)


|x| = |0.0110| -> A
|y| = |0.1100| -> B
(-y)= 1.0100
0 -> C (默认为0)

****************
	A		  C
00.0110	  0.0000
11.0100	  		   +(-y)补  因为值为正数
----------------
11.1010	  
<- 左移一位 A和C是并在一起的,要一起移动
11.0100	  0.000_   移动完空闲一位 
		  0.0000   根据移动前的和确定,正数末尾填1,负数填0
00.1100	  	       +|y|     因为值为负数
----------------
00.0000	  
<- 
00.0000	  0.0001   正数填1
11.0100	  		   +(-y)-----------------
11.0100	  
<- 
10.1000	  0.0010
00.1100	  	       +|y| 10为负数,01为正数
-----------------
11.0100	  
<- 
10.1000	  0.0100
00.1100			   +|y|
-----------------	
11.0100	  
		  0.1000 = 商,但是余数为负,需要+|y|
00.1100
-----------------
00.0000

|x| / |y| = C = 0.1000
(x)符号 ⊕ (y)符号 = 10 = 1
C = -0.1000

检验:

x = -0.0110 = 1.0110 = -0.375
y = 0.1100 = 0.75
-0.375 / 0.75 = -0.5

-0.5 = 1.1 = -0.1 <=> -0.1000

小方法

在这里插入图片描述

可以看每次的的双符号位,确认值是否正确,只能出现00或者11,因为:

+(-y)补: 可以看成减法,所以一定不可能超出,不可能出现01.或者10.

+|y|: 超出情况只有10.(负数情况),因为上一个值为正数,需要加(-y)补,根本可能出现01.(正数情况);
10情况: 上次运算只能为负数,且肯定以及进行过+|y|的操作,此次在+|y|一定为正数;
假设上一个正数是0,最小只能为(-y)补,则|y|+|y| >= (-y)补(-y)补一定小于等于二倍的|y|
所以,和的情况只能出现 0011

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值