精华内容
下载资源
问答
  • 任务是用分而治之的方法创建二进制乘法。我找到了一些描述这类问题的论文:wikibooks algorithmsUTSC paper (page 4)这是我的Python代码(3.5.2)def add(A, B):a_str = "".join([str(a) for a in A])b_str = "".join...

    我需要理解为什么我的代码给出了错误的答案。任务是用分而治之的方法创建二进制乘法。我找到了一些描述这类问题的论文:

    wikibooks algorithmsUTSC paper (page 4)

    这是我的Python代码(3.5.2)def add(A, B):

    a_str = "".join([str(a) for a in A])

    b_str = "".join([str(b) for b in B])

    bin_a = int(a_str, 2)

    bin_b = int(b_str, 2)

    return [int(a) for a in str(bin(bin_a + bin_b))[2:]]

    def add_n(*args):

    if len(args) <= 1:

    return args[0]

    bin_sum = [0]

    for num in args:

    bin_sum = add(bin_sum, num)

    return bin_sum

    def shift(A, n):

    if n <= 0:

    return A

    a_str = "".join([str(a) for a in A])

    bin_a = int(a_str, 2)

    bin_a = bin(bin_a << n)

    return [int(a) for a in str(bin_a)[2:]]

    def lfill(A, n):

    return [0] * (n - len(A)) + A

    def multiply(A, B):

    n = len(A)

    half = n // 2

    if n <= 1:

    return [A[0] * B[0]]

    xl, xh = A[:half], A[half:]

    yl, yh = B[:half], B[half:]

    a = multiply(xh, yh)

    b = multiply(xh, yl)

    c = multiply(xl, yh)

    d = multiply(xl, yl)

    b = add(b, c)

    a = shift(a, n)

    b = shift(b, half)

    return add_n(a, b, d)

    问题测试1:

    ^{pr2}$

    问题测试2:A = [1, 1, 1, 1]

    B = [0, 0, 0, 1]

    result: [1, 1, 1, 1, 0, 0, 0]

    real result: [1, 1, 1, 1]

    测试2的值跟踪:n half

    Before Shift [2, 1]: a: [1] b:[1]

    After Shift: a: [1, 0, 0] b:[1, 0]

    Before Shift [2, 1]: a: [0] b:[0]

    After Shift: a: [0] b:[0]

    Before Shift [2, 1]: a: [1] b:[1]

    After Shift: a: [1, 0, 0] b:[1, 0]

    Before Shift [2, 1]: a: [0] b:[0]

    After Shift: a: [0] b:[0]

    Before Shift [4, 2]: a: [1, 1, 0] b:[1, 1, 0]

    After Shift: a: [1, 1, 0, 0, 0, 0, 0] b:[1, 1, 0, 0, 0]

    所以,正如你所看到的,问题出在零的计数上,但不同的情况不同。这段代码不适用于所有长度不成对的二进制文件,但这不是问题,因为它可以很容易地规范化。在

    展开全文
  • 二进制补码乘法除法 1)二进制乘法 (1) Binary Multiplication) Binary numbers can be multiplied using two methods, 二进制数可以使用两种方法相乘, Paper method: Paper method is similar to multiplication ...

    二进制补码乘法除法

    1)二进制乘法 (1) Binary Multiplication)

    Binary numbers can be multiplied using two methods,

    二进制数可以使用两种方法相乘,

    1. Paper method: Paper method is similar to multiplication of decimal numbers on paper.

      纸张方法:纸张方法类似于纸张上十进制数字的乘法。

    2. Computer method: Computer method is used by digital machines to multiply the binary numbers.

      计算机方法:数字计算机使用计算机方法乘以二进制数。

    However, both these methods follow the same rule of multiplication which is,

    但是,这两种方法都遵循相同的乘法规则,即

        0 * 0 = 0
        0 * 1 = 0
        1 * 0 = 0
        1 * 1 = 1
    
    

    Note: If two binary numbers are of 'n' bits each in magnitude, then their product can be maximum '2n' bits long in magnitude.

    注意:如果两个二进制数的大小均为'n'位,则它们的乘积最大为'2n'位。

    长手乘法/纸张方法 (Long Hand Multiplication/Paper Method)

    The long Hand Multiplication technique is similar to decimal multiplication that we do on paper.

    长手乘法技术类似于我们在纸上进行的十进制乘法。

    In this technique, we multiply the multiplicand with each bit of multiplier and add the partial products together to obtain the result.

    在这项技术中,我们将被乘数与乘数的每一位相乘,并将部分乘积相加以获得结果。

    We scan the multiplier from the RHS, if the multiplier bit is 1 then we copy the whole multiplicand in the partial product and if the multiplier bit is 0, we replace all the bits of the multiplicand with 0 in the partial product.

    我们从RHS扫描乘数,如果乘数位为1,则复制部分乘积中的整个被乘数,如果乘数位为0,则将乘积中的所有位替换为部分乘积中的0。

    Example 1: Compute (10)2 * (11)2

    示例1:计算(10) 2 *(11) 2

    Solution:

    解:

    binary multiplication 1

    Therefore, the result is (10)2 * (11)2 = (110)2

    因此,结果是(10) 2 *(11) 2 =(110) 2

    Verification:

    验证:

    We can verify our result by converting the binary numbers to respective decimal numbers and multiplying them to get the result.

    我们可以通过将二进制数字转换为相应的十进制数字并乘以它们以获得结果来验证我们的结果。

    Here, (10)2 = (2)10, (11)2 = (3)10 and (110)2 = (6)10. When we will multiply 2 and 3, we will get the product as 6, which we are getting by multiplication of binary numbers. Hence our solution is correct.

    在此, (10) 2 =(2) 10(11) 2 =(3) 10(110) 2 =(6) 10 。 当我们将23相乘时,我们将得到乘积为6 ,这是通过二进制数相乘得到的。 因此,我们的解决方案是正确的。



    Example 2: Compute (111)2 * (101)2

    示例2:计算(111) 2 *(101) 2

    Solution:

    解:

    binary multiplication 2

    Therefore, the result is (111)2 * (101)2 = (100011)2

    因此,结果为(111) 2 *(101) 2 =(100011) 2



    Example 3: Compute (1010.01)2 * (1.01)2

    示例3:计算(1010.01) 2 *(1.01) 2

    Solution:

    解:

    binary multiplication 3

    Therefore, the result is (1010.01)2 * (1.01)2 = (1100.1101)2

    因此,结果为(1010.01) 2 *(1.01) 2 =(1100.1101) 2

    2)二进制除法 (2) Binary Division)

    Like binary multiplication, division of binary numbers can also be done in two ways which are:

    像二进制乘法一样,二进制数的除法也可以通过两种方式完成:

    1. Paper Method: Paper Method division of binary numbers is similar to decimal division.

      纸张方法 :纸张方法对二进制数的除法类似于十进制除法。

    2. Computer Method: Computer Method is used by the digital devices where they make use of 2's complement of a number to subtract the numbers during division.

      计算机方法 :数字设备使用数字方法使用数字的补码来在除法运算中减去数字。

    长手分割法/纸法 (Long Hand Division Method/Paper Method)

    In binary division, there are only two possibilities either 0 or 1. If the divisor goes into the dividend then quotient will be 1 and if the divisor doesn’t then the quotient will be 0. Similar, to decimal division, we will subtract divisor from the dividend and the result will be appended by the next bit in the dividend. This process repeats until all the bits of the dividend are considered.

    二进制除法中 ,只有两种可能性,即0或1。如果除数进入被除数,则商将为1;如果除数没有,则商将为0。类似于十进制除法,我们将减去除数的红利和结果将被添加到红利的下一位。 重复此过程,直到考虑了除数的所有位。

    Example 1: Divide (111101)2 by (100)2

    范例1:将(111101) 2除以(100) 2

    Solution:

    解:

    binary division 1

    Therefore, the result is (111101)2 / (100)2 gives (1111)2 (Quotient) and 1 (Remainder)

    因此,结果为(111101) 2 /(100) 2得出(1111) 2 (商)和1(余数)



    Example 2: Divide (110101.11)2 by (101)2

    范例2:将(110101.11) 2除以(101) 2

    Solution:

    解:

    binary division 2

    Therefore, the result is (110101.11)2 / (101)2 gives (1010.11)2.

    因此,结果为(110101.11) 2 /(101) 2给出(1010.11) 2

    Verification:

    验证:

    We can verify our result by converting the binary numbers to respective decimal numbers and then dividing the dividend by the divisor to get the result.

    我们可以通过将二进制数字转换为相应的十进制数字,然后将除数除以除数来得到结果,从而验证我们的结果。

    Here, (110101.11)2 = (53.75)10, (101)2 = (5)10 and (1010.11)2 = (10.75)10. When we will divide 53.75 by 5, we will get the result as 10.75, which we are getting by doing division of binary numbers. Hence our solution is correct.

    在此, (110101.11) 2 =(53.75) 10(101) 2 =(5) 10(1010.11) 2 =(10.75) 10 。 当我们将53.75除以5时 ,将得到10.75的结果,这是通过对二进制数进行除法得到的。 因此,我们的解决方案是正确的。



    Example 3: Divide (1010.1)2 by (101.01)2

    示例3:将(1010.1) 2除以(101.01) 2

    Solution:

    解:

    binary division 3

    Therefore, the result is (1010.1)2 / (101.01)2 gives (10)2.

    因此,结果是(1010.1)2 /(101.01)2给出了(10)2。

    翻译自: https://www.includehelp.com/basics/binary-multiplication-and-division.aspx

    二进制补码乘法除法

    展开全文
  • 用74ls138实现2位二进制乘法器74LS138为3线-8线译码器,共有54/74S138和 54/74LS138两种线路结构型式,其工作原理如下:当一个选通端(G1)为高电平,另两个选通端(/(G2A)和/(G2B))为低电平时,可将地址端(A、B、C)的...

    用74ls138实现2位二进制乘法器

    74LS138为3线-8线译码器,共有54/74S138和 54/74LS138两种线路结构型式,其工作原理如下:

    当一个选通端(G1)为高电平,另两个选通端(/(G2A)和/(G2B))为低电平时,可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出。利用 G1、/(G2A)和/(G2B)可级联扩展成 24 线译码器;若外接一个反相器还可级联扩展成 32 线译码器。若将选通端中的一个作为数据输入端时,74LS138还可作数据分配器。

    c23c6adf04b860a4f6dd772cc81e3efd.png

    无论从逻辑图还是功能表我们都可以看到74LS138的八个输出引脚,任何时刻要么全为高电平1—芯片处于不工作状态,要么只有一个为低电平0,其余7个输出引脚全为高电平1。如果出现两个输出引脚同时为0的情况,说明该芯片已经损坏。

    使用74138和必要的门电路设计一个乘法器电路。能实现两位二进制数相乘,并输出结果。

    57ef577858e3a433c252a7e32acb11c9.png

    两位二进制数相乘真值表。设两个乘数是AB和CD,结果是F3F2F1F0

    9a6423d7fb3140390b61a1ebe31517ad.png

    写出最小项逻辑表达式:

    F3=m15

    F2=m10+m11+m14→F2=(m10’m11’m14’)’

    F1=m6+m7+m9+m11+m13+m14

    F0=m5+m7+m13+m15 。 (本文来源网友上传,如有侵权,可联系管理员删除)

    展开全文
  • 二进制加减法,多种乘法方式实现二进制乘法
  • 我编写这个python程序是为了能够理解如何实现乘法算法。我已经把我所有的工作,所有的指示和我所做的事情的“主”拷贝放在一起,这样就不必浪费时间在3-4个文件之间切换了。我的问题是如何开始学习shift_left函数和...

    我编写这个python程序是为了能够理解如何实现乘法算法。我已经把我所有的工作,所有的指示和我所做的事情的“主”拷贝放在一起,这样就不必浪费时间在3-4个文件之间切换了。我的问题是如何开始学习shift_left函数和binary_multiplaction函数。我不知道怎么开始。在import unittest

    import sys

    def binary_addition( a, b ):

    """

    Binary addition.

    :param a: the first operand - a tuple of bits

    :param b: the second operand - a tuple of bits

    :type a: tuple

    :type b: tuple

    :return: the sum, as a tuple of bits

    :rtype: tuple

    """

    # first, ensure that the 2 arrays have the same number of bits,

    # by filling in with 0s on the left of the shortest operand

    diff = len(a)-len(b)

    if diff > 0:

    # concatenating a tuple of size with tuple b (all elements are 0s)

    b = ((0,) * diff) + b

    elif diff < 0:

    # concatenating a tuple of size with tuple a (all elements are 0s)

    a = ((0,) * (-diff)) + a

    c = 0

    s = [0] * (len(a)+1)

    for j in reversed(range(0, len(a))):

    d = (a[j] + b[j] + c) // 2

    s[j+1] = (a[j] + b[j] + c) - 2*d

    c = d

    s[0] = c

    # removing unneeded 0s on the left

    if s[0] == 0:

    s.remove(0)

    return tuple(s)

    def shift_left(a,n):

    """

    Shift an array of bits to the L, by adding n 0s on the right.

    #. construct a tuple of n elements, all 0s

    #. concatenate it to the tuple that has been passed in

    #. return the concatenation

    :param a: a tuple of bits

    :param n: the number of positions over which to shift

    :type a: tuple

    :return: if n > 0, the L-shifted array; otherwise, the original array; *if the first parameter (`a` ) is not of the `tuple` type, the function should handle it nicely and return an empty tuple. A test in the test suite below checks that this requirement has been met.*

    :rtype: tuple

    """

    #

    return a + (0,) * n

    def binary_multiplication(a, b):

    """

    Multiply arrays of bits.

    #. Initialize the cumulative sum of product (a tuple with 0 as its only element)

    #. Go over the bits in `b` (the second multiplicand), in *reverse order*: if current bit is 1, add to the cumulative sum the operand `a`, L-shifted by 0 for rightmost bit, by 1 for bit k-1, by 2 for bit k-2, ...

    #. return the cumulative sum

    :param a: first multiplicand - an array of bits

    :param b: second multiplicand - an array of bits

    :type a: tuple

    :type b: tuple

    :return: an array of bits

    :rtype: tuple

    """

    #

    class Multiplication_unittest( unittest.TestCase):

    def test_binary_addition_1(self):

    self.assertEqual( binary_addition((1,0,1),(1,1,1,1)), (1,0,1,0,0))

    def test_binary_addition_2(self):

    self.assertEqual( binary_addition((1,1,1,1),(1,0,1)), (1,0,1,0,0))

    def test_binary_addition_3(self):

    self.assertEqual( binary_addition((1,0,1,1),(1,1,1,1)), (1,1,0,1,0))

    def test_binary_addition_4(self):

    self.assertEqual( binary_addition((0,),(1,)), (1,))

    def test_binary_addition_5(self):

    self.assertEqual( binary_addition((1,),(1,)), (1,0))

    def test_binary_addition_6(self):

    self.assertEqual( binary_addition((0,),(0,)), (0,))

    def test_shift_left_1(self):

    """ Trying to shift a value that is _not_ a tuple (ex. an integer) returns an empty tuple """

    self.assertEqual( shift_left( 5, 3 ), () )

    def test_shift_left_2(self):

    """ Shifting by 0 places returns the array that has been passed in """

    self.assertEqual( shift_left((1,1), 0 ), (1,1) )

    def test_shift_left_3(self):

    """ Shifting an empty tuple by 1 place return a tuple with 0 as a single element """

    self.assertEqual( shift_left((), 1 ), (0,) )

    def test_shift_left_4(self):

    """ Shifting a 1-tuple (with 0 as the only element) by 1 place """

    self.assertEqual( shift_left((0,), 1 ), (0,0) )

    def test_shift_left_5(self):

    """ Shifting a 1-tuple (with 1 as the only element) by 1 place """

    self.assertEqual( shift_left((1,), 1 ), (1,0) )

    def test_shift_left_6(self):

    """ Shifting 110 (6) by 3 places returns 110000 (6x8=48) """

    self.assertEqual( shift_left((1,1,0), 3 ), (1,1,0,0,0,0) )

    def test_multiplication_1(self):

    """ Short operands: 0 x 0 """

    self.assertEqual( binary_multiplication( (0,),(0,)), (0,))

    def test_multiplication_2(self):

    """ Short operands: 0 x 1 """

    self.assertEqual( binary_multiplication( (0,),(1,)), (0,))

    def test_multiplication_3(self):

    """ Short operands: 1 x 0 """

    self.assertEqual( binary_multiplication( (1,),(0,)), (0,))

    def test_multiplication_4(self):

    """ Short operands: 1 x 1 """

    self.assertEqual( binary_multiplication( (1,),(1,)), (1,))

    def test_multiplication_5(self):

    """ Short operands 2 x 1"""

    self.assertEqual( binary_multiplication( (1,0),(1,)), (1,0))

    def test_multiplication_6(self):

    """ Long operands """

    self.assertEqual( binary_multiplication( (1,0,1,1,1,1,0,1),(1,1,1,0,1,1,1,1)), (1,0,1,1,0,0,0,0,0,1,1,1,0,0,1,1))

    def test_multiplication_5(self):

    """ Operands of different sizes """

    self.assertEqual( binary_multiplication( (1,0,0,1,1),(1,1,1,0,1,1,1,1)), (1,0,0,0,1,1,0,1,1,1,1,0,1))

    def main():

    unittest.main()

    if __name__ == '__main__':

    main()

    展开全文
  • 二进制乘法原理

    2019-10-08 15:58:03
    二进制乘法原理 二进制乘法实际上就是左移和加法,假设被乘数是a,我们将乘数分解为2^n + 2^m + 2^k ...,则乘法结果为:a<<n + a<<m+a<<k ... ,以下题为例: 4. What is the r...
  • 一种二进制乘法的计算方法计算机中数据都以二进制的形式存储,在对数据进行加、减、乘、除运算时计算机需要对二进制数据进行处理,而非人类熟悉的十进制。本文的目的是帮助大家理解计算机数据运算处理的过程,所以以...
  • 八位二进制乘法器VHDL

    千次阅读 2020-11-02 21:56:08
    八位二进制乘法器VHDL工程文件一、 实验目的二、设计要求三、实验仪器与环境四、实现原理五、系统设计及仿真六、顶层设计:七、结果仿真:附录: 工程文件 点击下载八位二进制乘法器工程文件 一、 实验目的 熟习...
  • 在讲二进制乘法之前,我们先看下十进制的乘法,比如这个例子: 其实乘法就是每一位数乘完之后的结果相加,136 + 170 = 306, 二进制也是一样的,其实进制只是一种表现形式而已,原理都没啥差别。 具体题目可以...
  • 那么二进制乘法是如何计算的呢? 我们都知道十进制的乘法,比如20.0*10=200.也就是小数点向右移动一位,如果是除以10的话,小数点就想左移动一位就可以了。 如果是二进制的话,也是同样的道理。只不过改成了2的幂次...
  • quartus软件设计实现8位二进制乘法器电路

    万次阅读 多人点赞 2018-03-25 10:40:29
    一、选题目的1、学会使用quartus软件设计电路及对其进行仿真,设计实现8位二进制乘法器电路。2、学习并掌握8位二进制乘法器的原理、设计、分析和测试方法。二、设计目标采用移位相加的方法实现8位二进制乘法器电路。...
  • Based on verilog HDL language 4-bit binary multiplier design, its function is fast and reliable to achieve binary multiplication operation.
  • 二进制乘法的 booth 算法 wiki 的解释 算法原理 考虑一个由若干个 0 包围着若干个 1 的正的二进制乘数,比如 00111110,积可以表达为: M× ′′0  0  1  1  1  1  1  0 ′′=M×(25+24+23+22+21...
  • 本文包括4位二进制乘法(4位乘4位)和8位二进制除法(8位除4位)的详细计算过程。 1.创作原因 计组实验中的涉及到此问题,当时上网查阅了许多博客和资料都没能理解这两者的计算过程,因此想写一篇博客为后来者提供...
  • [c++]用C++字符串实现二进制乘法 说明 二进制乘法实现方法不难,模拟手动运算的思想,之所以选用字符串实现是因为字符串在移动方面性能显著,代码运用知识十分基础,希望可以给大家一个参考。 函数部分 思来想去,...
  • 八位二进制乘法器.zip

    2020-11-02 22:10:22
    用移位相加的方法设计一个8位二进制串行乘法器。基于EP4CE1022C8芯片,于Quartus Ⅱ 13.1中实现。包含仿真文件,上板子验证成功。此为西电EDA课设大作业,实验报告见博客,仅供参考。
  • C实现二进制乘法

    2014-12-14 12:05:00
    2 二进制乘法 3 */ 4 #include <stdio.h> 5 #include <stdlib.h> 6 #define LEN 64 //因子二进制位数的两倍,32位乘法结果不会超过64位 7 8 int main() 9 { 10 unsigned int a = 0x...
  • 一种二进制乘法的计算方法计算机中数据都以二进制的形式存储,在对数据进行加、减、乘、除运算时计算机需要对二进制数据进行处理,而非人类熟悉的十进制。本文的目的是帮助大家理解计算机数据运算处理的过程,所以以...
  • ## 线上实验五:2个2位二进制乘法

    千次阅读 2020-08-05 19:22:48
    线上实验五:2个2位二进制乘法器 一、实验目的 设计一个乘法器, 实现两个四位二进制数的乘法。 两个二进制数分别是被乘数 AB和乘数CD。被乘数和乘数这两个二进制数分别由高低电平给出。 乘法运算的结果即乘积由一...
  • 二进制乘法运算

    2020-09-23 14:01:35
    (2) 获取整数n的二进制中最后一个1: n&~(n-1)或者n&(-n)。例如n=010100,则-n=101100,n&(-n)=000100。 (3) 去掉整数n的二进制中最后一个1: n&(n-1)。例如n=010100,n-1=010011,则n&(n-1)=010000...
  • 8位二进制乘法采用移位相加的方法。即用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加...
  • 数字电路-四位二进制乘法器课程设计报告完整版!!可以直接用的。
  • vhdl硬件设计语言 四输入表决器电路 二位二进制乘法器电路 一位二进制全减器等源代码及仿真波形 MAX plus II 仿真波形
  • 74LS138译码器实现2位二进制乘法器-QuartusII 软件仿真 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录74LS138译码器实现2位二进制乘法器-QuartusII 软件仿真一、74LS138译码器介绍二...
  • 用VHDL语言做的4位二进制乘法器,编写用的是QuartusII软件。调用了寄存器,加法器,计数器。外加状态机,用原理图实现顶层的编写。
  • 初学Python写二进制文件把一个图片的16进制数据保存到一个txt文本,从这个txt文本读出并保存为二进制文件jpg图片文件。说明:图片读出的0xff粘贴ff到文本中,读出时是字符串的”ff”。我主要是用C语言,python为初学...
  • 1、 分别用for语句和repeat语句两种方法实现8位二进制乘法器; 2、 提交乘法器程序和测试程序,观测仿真波形,并对仿真波形做分析,说明设计的正确性。 二、实验过程及结果: 1、for语句实现8位二进制乘法器 module ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,771
精华内容 708
关键字:

二进制乘法