How can I perform multiplication without the '*' operator?

前端 未结 30 1635
别跟我提以往
别跟我提以往 2020-12-01 01:47

I was just going through some basic stuff as I am learning C. I came upon a question to multiply a number by 7 without using the * operator. Basically it\'s like this

<
30条回答
  •  北荒
    北荒 (楼主)
    2020-12-01 02:44

    Mathematically speaking, multiplication distributes over addition. Essentially, this means:

    x * (a + b + c ...) = (x * a) + (x * b) + (x * c) ...

    Any real number (in your case 7), can be presented as a series of additions (such as 8 + (-1), since subtraction is really just addition going the wrong way). This allows you to represent any single multiplication statement as an equivalent series of multiplication statements, which will come up with the same result:

    x * 7
    = x * (8 + (-1))
    = (x * 8) + (x * (-1))
    = (x * 8) - (x * 1)
    = (x * 8) - x
    

    The bitwise shift operator essentially just multiplies or divides a number by a power of 2. So long as your equation is only dealing with such values, bit shifting can be used to replace all occurrence of the multiplication operator.

    (x * 8) - x = (x * 23) - x = (x << 3) - x

    A similar strategy can be used on any other integer, and it makes no difference whether it's odd or even.

提交回复
热议问题