如何在C中快速找到2 ^ x。如果你们有任何想法请帮助。
答案 0 :(得分:13)
是int还是float?对于int,使用左移。对于float,pow()函数
答案 1 :(得分:11)
向左移位,每次移位都会将数字乘以2,就像向左移动十进制数乘以10一样。
使用<<
运算符,如下所示:
int twoPowZero = 1; // any number^0 is 1
int twoPowOne = 1 << 1; // this sets the '2' bit to '1'
int twoPowTwo = 1 << 2;
int twoPowFive = 1 << 5;
int twoPowTen = 1 << 10;
依此类推,直至到达1 << 30
。如果您使用带符号的32位整数,那么1 << 31
将为您提供-2147483648,因为它有两个补码。如果您想要高于使用long long unsigned int
或uint64_t
(64位整数)。或者,如果您的平台支持它:uint128_t
。
如果你想要更高,你需要推出自己的“大整数”代码。请注意,某些平台和编译器带有128位整数类型,但运行时性能各不相同:它们可能需要一个可以执行128位操作的处理器,或者它们可能会将其分解为两个64位操作。
答案 2 :(得分:4)
回想一下,在二进制系统中,位置N
中的位代表2^N
。因此,正int
的公式为
1 << x
答案 3 :(得分:4)
#include <stdio.h>
#include <math.h>
int main ()
{
printf ("7.0 ^ 3 = %lf\n", pow (7.0,3));
printf ("4.73 ^ 12 = %lf\n", pow (4.73,12));
printf ("32.01 ^ 1.54 = %lf\n", pow (32.01,1.54));
return 0;
}
输出:
7.0 ^ 3 = 343.000000
4.73 ^ 12 = 125410439.217423
32.01 ^ 1.54 = 208.036691
答案 4 :(得分:3)
#include <math.h>
float powf(float x, float y); /* C99 */
double pow(double x, double y);
long double powl(long double x, long double y); /* C99 */
答案 5 :(得分:3)
在1
位置x
设置1 << x
。
在这种情况下,x
应小于整数类型的宽度,x
应为正。