如何在c中使用加权到x的幂

时间:2011-09-17 21:53:56

标签: c

我的问题是如何在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开始然后混乱。

谢谢!

3 个答案:

答案 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;
}