Multiplication of two integers using bitwise operators

前端 未结 7 921
迷失自我
迷失自我 2020-11-30 00:49

How can I multipy two integers using bitwise operators?

I found an implementation here. Is there a better way of implementing multiplication?

For example: 2

相关标签:
7条回答
  • 2020-11-30 01:33

    I came here looking for this question and I find Zengr's answer correct. Thanks Zengr! But there is one modification I would want to see which is getting rid of the '+' operator in his code. This should make multiplication of two arbitrary numbers using NO ARITHMETIC OPERATORS but all bitwise.

    Zengr's solution first:

    #include<stdio.h>
    main()
    {
       int a,b,result;     
       printf("nEnter the numbers to be multiplied :");
       scanf("%d%d",&a,&b);         // a>b
       result=0;
       while(b != 0)               // Iterate the loop till b==0
       {
            if (b&01)                // Bitwise &  of the value of b with 01
            {
              result=result+a;     // Add a to result if b is odd .
            }
            a<<=1;                   // Left shifting the value contained in 'a' by 1 
                               // multiplies a by 2 for each loop
            b>>=1;                   // Right shifting the value contained in 'b' by 1.
       }
       printf("nResult:%d",result);
    }
    

    My Answer would be:

    #include<stdio.h>
    main()
    {
       int a,b,result;     
       printf("nEnter the numbers to be multiplied :");
       scanf("%d%d",&a,&b);         // a>b
       result=0;
       while(b != 0)               // Iterate the loop till b==0
       {
            if (b&01)                // Bitwise &  of the value of b with 01
            {
              result=add(result,a);     // Add a to result if b is odd .
            }
            a<<=1;                   // Left shifting the value contained in 'a' by 1 
                                    // multiplies a by 2 for each loop
            b>>=1;                   // Right shifting the value contained in 'b' by 1.
       }
       printf("nResult:%d",result);
    }
    

    where I would write add() as:

    int Add(int x, int y)
    {
        // Iterate till there is no carry  
        while (y != 0)
        {
            // carry now contains common set bits of x and y
            int carry = x & y;  
    
            // Sum of bits of x and y where at least one of the bits is not set
            x = x ^ y; 
    
            // Carry is shifted by one so that adding it to x gives the required sum
            y = carry << 1;
        }
        return x;
    }
    

    or recursively adding as:

    int Add(int x, int y)
    {
        if (y == 0)
            return x;
        else
            return Add( x ^ y, (x & y) << 1);
    }
    

    source for addition code: http://www.geeksforgeeks.org/add-two-numbers-without-using-arithmetic-operators/

    0 讨论(0)
提交回复
热议问题