我想知道如何在C语言中计算2的x次方。我知道有一种类似移位的方法可以实现这个功能。我试过将x左移1位,即total = x << 1,但没有成功。我知道如果将一个数左移1位,相当于将它乘以2。或者说类似于这样的操作。
int x;
for(x=0; x<4; x++){
total += x <<1; //
}
执行完毕后,我希望总数为15(2 0 + 2 1 + 2 2 + 2 3)。有什么想法吗?我的总数一开始是0,然后就出错了。谢谢!
我想知道如何在C语言中计算2的x次方。我知道有一种类似移位的方法可以实现这个功能。我试过将x左移1位,即total = x << 1,但没有成功。我知道如果将一个数左移1位,相当于将它乘以2。或者说类似于这样的操作。
int x;
for(x=0; x<4; x++){
total += x <<1; //
}
恰恰相反。 1 << x
将会给你 '2 ^ x'。
这应该可以满足你的要求。调用pow(2, x)
以得到2x。
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;
}
#include <math.h>
int main() {
double base = 2;
double exponent = 4;
double result = pow(base, exponent);
return 0;
}
ldexp
是使用浮点数进行此操作的正确方法,但是无论是ldexp
还是pow
,只要结果不会溢出(变为无穷大)或下溢(变为零),它们都应该始终给出精确的结果。 - R.. GitHub STOP HELPING ICE