不使用加减乘除如何将一个数扩大某个倍数

这样的题目常常在面试中考到,主要考察位运算的相关知识,经过位运算实现。面试

以前搜索相关代码,感受比较费解,如今那《剑指Offer》中面试题47的方法实现简单的将一个数扩大七倍,扩大九倍为例,说明。spa

先经过位运算实现两个数相加参考《剑指Offer》搜索

int Add(int num1, int num2)
{
    int sum,carry;
    do
    {
        sum = num1^num2;
        carry = (num1 & num2) << 1;

        num1 = sum;
        num2 = carry;
    } while (num2 != 0);

    return num1;
}

int main()
{
    int num;
    scanf("%d",&num);
    //将一个数扩大七倍
    int sum =Add(num<<3,-num);
    printf("%d * 7 = %d\n",num,sum);
    //将一个数扩大9倍
    sum =Add(num<<3,num);
    printf("%d * 9 = %d\n",num,sum);
    return 0;

}方法

有更好的方法,但愿多交流
while