-6

次のコードで演算子「<<」が何を意味するのか理解できませんでした。

    long hashString(char* key)
 {
   int n = strlen(key);
   long h = 0;
   for(int i=0; i<n; i++)
     {
        h = (h << 2) + key[i];
     }
  return abs(h % tablesize);
 }
4

4 に答える 4

1

左シフト演算子です。値を 2 ビット左にシフトし、実質的に 2 の 2 乗 (シフト量) を乗算します。

a << b

以下と同じです:

a * (2 to the power of b)
于 2012-05-14T18:13:34.000 に答える
0

これはビット シフト演算子です(このコンテキストではlong変数に対するものです)。

すべてのビットを 2 桁シフトすると、4 倍になります (10 を基数とする数値に 2 桁を追加して 100 を掛けるのと同じです。一般化するには、n桁シフトすると数値が で乗算され2^nます)。例えば:

unsigned int x = 0xA;     // x = 1010  (10 base 10)
unsigned int y = x << 1;  // y = 10100 (20 base 10)

ビットを右にシフトすることで 2 で割ることができます (つまり、端から 1 つ切り落とす)。

unsigned int x = 0xA;     // x = 1010  (10 base 10)
unsigned int y = x >> 1;  // y =  101  (5 base 10)
于 2012-05-14T18:12:56.010 に答える
0

これは c++ のビットシフト演算子です。

于 2012-05-14T18:13:32.647 に答える
0

これは、左に 2 ビットシフトしたときに値bitwise shift leftを割り当てることを意味する演算子であり、効果的に 2 の 2 乗を乗算します。hh

h << 2 == h * (2 ^ 2)

詳細については、こちらを参照してください

ヒント: 次回はまずhttp://www.google.comを検索してください。

于 2012-05-14T18:16:35.367 に答える