4

Cで2^xをすばやく見つける方法。何かアイデアがあれば、助けてください。

4

6 に答える 6

13

それはintですか、それともfloatですか?intには、左シフトを使用します。floatの場合、pow()関数

于 2012-09-07T03:43:28.843 に答える
11

左にビットシフトすると、10進数を左にシフトすると10が乗算されるのと同じように、場所がシフトするたびに数値が2倍になります。

<<次のように演算子を使用します。

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、2の補数のため、-2147483648になります。long long unsigned intまたはuint64_t(64ビット整数)を使用するよりも高くしたい場合。または、プラットフォームがそれをサポートしている場合:uint128_t

さらに高くしたい場合は、独自の「大きな整数」コードをロールする必要があります。一部のプラットフォームとコンパイラには128ビット整数型が付属していますが、実行時のパフォーマンスは異なります。128ビット操作を実行できるプロセッサが必要な場合や、2つの64ビット操作に分割される場合があります。

于 2012-09-07T03:44:49.137 に答える
4

Nバイナリシステムでは、位置のビットがを表すことを思い出してください2^N。したがって、正の式intは次のようになります。

1 << x
于 2012-09-07T03:44:23.097 に答える
3
#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
于 2012-09-07T03:45:24.990 に答える
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 */
于 2012-09-07T03:45:43.207 に答える
3

1aをxthビット位置に設定します1 << x

この場合x、整数型の幅より小さく、x正の値にする必要があります。

于 2012-09-07T03:46:49.367 に答える