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

标签 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;

最佳答案

<< 之间的优先级和 +是违反直觉的。使用括号并使用 -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;
}

关于c - 使用按位运算符将整数乘以 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40960056/

相关文章:

c++ - 为什么 printf 和 isnan 不同意 long double 值是否为 NaN?

c - C 中文件读取的奇怪行为

c - 当我用套接字传输结构时,我应该考虑字节顺序吗

C++ bmp 按位运算符

java - 如何在java应用程序中访问C方法..?

c++ - 转换到 int vs floor

c - 为什么输出为负(使用按位非)

C 字符串和按位运算符

c - 这个按位运算符的位置是否会改变行为?

c - 如何对变量进行位移并形成整个值