我的问题是如何在c中计算2 ^(x)。我知道有一些像移动的东西做同样的事情。我试着做total = x<< 1,但那没用。我知道,如果我移位一位,则将其乘以2。或类似的东西。
int x;
for(x=0; x<4; x++){
total += x <<1; //
}
当执行此操作时,我预计总数为15(2 0 + 2 1 + 2 2 + 2 3 )
关于我做错的任何想法?我的总数从0开始然后混乱。
谢谢!
答案 0 :(得分:22)
反过来说。 1 << x
会给你'2 ^ x'。
答案 1 :(得分:2)
这应该做你想要的。致电pow(2, x)
获得2 x 。
int abs (int x) {
if (x < 0) return -x;
return x;
}
int signum (int x) {
if (x < 0) return -1;
if (x > 0) return 1;
return 0;
}
int add (int x, int y) {
for (int i = 0; i < abs(y); ++i) {
if (y > 0) ++x;
else --x;
}
return x;
}
int mult (int x, int y) {
int sign = signum(x) * signum(y);
x = abs(x);
y = abs(y);
int res = 0;
for (int i = 0; i < y; ++i) {
res = add(res, x);
}
return sign * res;
}
int pow (int x, int y) {
if (y < 0) return 0;
int res = 1;
for (int i = 0; i < y; ++i) {
res = mult(res, x);
}
return res;
}
答案 2 :(得分:2)
左移限制为CPU的字大小,32或64位,这限制了在结果未定义(2 ^ 31或2 ^ 63)之前可以安全使用的最大指数。
以下适用于较大的指数但使用浮点运算。如果您需要精确的结果,则应考虑使用无限精度数学库,例如GMP
#include <math.h>
int main() {
double base = 2;
double exponent = 4;
double result = pow(base, exponent);
return 0;
}