快速找到2 ^ x的方法

时间:2012-09-07 03:41:38

标签: c++ c

如何在C中快速找到2 ^ x。如果你们有任何想法请帮助。

6 个答案:

答案 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 intuint64_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应为正。