使用按位运算符将整数乘以5

时间:2016-12-04 15:12:46

标签: c bitwise-operators

我试图使用按位运算将整数乘以5。但是我的代码中似乎存在一个我无法识别的错误。 这是我的代码

#include <stdio.h>

#define print_integer(exp) printf("%s : %d\n", #exp, (exp))

int multiply(int num) {
    int ans;
    ans = num << 2 + num;
    return ans;
}

int main() {
    int a = 1, b = 2, c = 3;
    print_integer(multiply(a));
    print_integer(multiply(b));
    print_integer(multiply(c));
    return 0;
}

编辑: - 错误在行ans = num << 2 + num;

2 个答案:

答案 0 :(得分:3)

<<+之间的优先顺序是反直觉的。使用括号并使用-Wall进行编译以获得有用的警告,以抵消这种潜在的错误:

#include <stdio.h>

#define print_integer(exp) printf("%s : %d\n", #exp, (exp))

int multiply(int num) {
      return (num << 2) + num;
}

int main(void) {
    int a = 1, b = 2, c = 3;
    print_integer(multiply(a));
    print_integer(multiply(b));
    print_integer(multiply(c));
    return 0;
}

答案 1 :(得分:-1)

您正在添加更改后的num(num&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;

int tmp = num ; 
ans = num << 2 + tmp ;