使用按位运算符将整数乘以 5
multiplying an integer by 5 using bitwise operator
我正在尝试使用按位运算将整数乘以 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;
您要在更改后添加 num (num<<2),为 num 设置一个临时值。
int tmp = num ;
ans = num << 2 + tmp ;
<<
和 +
之间的优先级是违反直觉的。使用括号并使用 -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;
}
我正在尝试使用按位运算将整数乘以 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;
您要在更改后添加 num (num<<2),为 num 设置一个临时值。
int tmp = num ;
ans = num << 2 + tmp ;
<<
和 +
之间的优先级是违反直觉的。使用括号并使用 -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;
}