十进制运算

本文最后更新于:2020年12月18日 下午

十进制运算

加法🌙

Addition

  • 当有进位时,就对整个二进制表示加 0110;这相当于16进制和10进制的转换需要✔️

减法

Subtraction

example

  • 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})$
    • 算法步骤为:
      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$
      2. 复用NBCD码得加法得$N_{3} = N^{'}{1} + N{2} = 1 \times 10^{n} - N_{1} - 1 + N_{2}$(以通过NBCD码加法进位得修正)
      3. 看$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 0101

    0111 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 1101

    1011 0111 1101 (对1011、1101进行修正) +
    0110 0000 0110 ->
    1 0001 1000 0011 (进位为1,在此基础上+1后取负) ->

    0001 1000 0100 (-184)


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!