十进制运算
本文最后更新于:2020年12月18日 下午
十进制运算
加法🌙
- 当有进位时,就对整个二进制表示加 0110;这相当于16进制和10进制的转换需要✔️
减法
-
emmm!对于减法的实现,我们很容易会和二进制补码联系起来,就是重复利用已经实现好的加法器进行运算
-
$N_{1} - N_{2} = N_{1} + (10 ^{n} - N_{2})$
-
因为我们使用NBCD码进行减法运算时,它是将每4位当作一个块,计算数字后乘以10的底来运算的
-
$N_{1} - N_{2} = [10^{n} - (10^n - N_{1} + N_{2})]$
-
修正后步骤即为:
- $N_{1} - N_{2}$; 现对$N_{1}$对照着表格进行转换(其实就是9 - X),记转换后的为$N^{'}$
- 然后对$N^{'}$与$N_{2}$进行上面的加法(复用)
- 考虑加法结果的进位
- 进位为0:直接进行转换即为结果
- 进位为1:直接在低位+1,然后取负即为结果
😆简单证明:
NBCD减法算法的简单证明✔️:
- 给定$N_{1}, N_{2}$; 假设它们用$4n$位01串表示的NBCD码,均为整数,不带符号,因为有符号的数计算同理。
- 计算$Ans = N1 - N2$; $N_{1} = (a_{n,4}…a_{n,1})…(a_{1,4}…a_{1,1}); N_{2} = (b_{n,4}…b_{n,1})…(b_{1,4}…b_{1,1})$
- 算法步骤为:
- 按照转换表,对$N_{1}$的从左开始,每四位做一次转换(1001 - 4bits)得$N^{‘}{1} = (a{'}_{n,4}…a{'}{n,1})…(a{'}_{1,4}…a{’}{1,1})$;其中$N^{'}{1} = 9 \times 10^{n-1} + 9 \times 10^{n-2} + … + 9 \times 10^{0} - N_{1} = 1 \times 10^{n} - N_{1} - 1$
- 复用NBCD码得加法得$N_{3} = N^{'}{1} + N{2} = 1 \times 10^{n} - N_{1} - 1 + N_{2}$(以通过NBCD码加法进位得修正)
- 看$N_{3}$是否有进位:
- 如果$N_{3}$没有进位,则说明$10^{n} - N_{1} - 1 + N_{2} < 10^{n}$; 即$N_{1} - N_{2} > 1$;所以直接对$N_{3}$做一次上述转换得$N^{'}{3}$; 有$N^{'}{3} = 10^{n} - N_{3} - 1 = 10^{n} - (10^{n} - N_{1} - 1 +N_{2}) = N_{1} - N_{2}$即为结果。
- 如果$N_{3}$有进位,即$10^{n} - N_{1} - 1 + N_{2} \geq 10^{n}$;即有$N_{2} - N_{1} \geq 1$;即$N_{3} = 10^{n} + N_{2} - N_{1} - 1 $;即进位表示$10^{n}$, 而$N_{3}$为$N_{2} - N_{1} - 1$; 为此,我们只要对$N_{3}$在低位加上“0001”,然后取负即为结果。
✔️简单的例子
eg: 309 - 125
0011 0000 1001 (309)-
0001 0010 0101 (125)0110 1001 0000 (进行一次转换)+
0001 0010 0101 ->
0111 1011 01010111 1011 0101 (对1011修正)+
0000 0110 0000 ->
1000 0001 0101 进位为0, 直接转换即为结果 ->
0001 1000 0100 (184)eg: 125 - 309
0001 0010 0101 (125) -
0011 0000 1001 (309)1000 0111 0100 (进行了一次转换) +
0011 0000 1001 ->
1011 0111 11011011 0111 1101 (对1011、1101进行修正) +
0110 0000 0110 ->
1 0001 1000 0011 (进位为1,在此基础上+1后取负) ->0001 1000 0100 (-184)
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!