次のコードで演算子「<<」が何を意味するのか理解できませんでした。
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);
}
左シフト演算子です。値を 2 ビット左にシフトし、実質的に 2 の 2 乗 (シフト量) を乗算します。
a << b
以下と同じです:
a * (2 to the power of b)
これはビット シフト演算子です(このコンテキストでは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)
これは c++ のビットシフト演算子です。
これは、左に 2 ビットシフトしたときに値bitwise shift left
を割り当てることを意味する演算子であり、効果的に 2 の 2 乗を乗算します。h
h
h << 2 == h * (2 ^ 2)
詳細については、こちらを参照してください。
ヒント: 次回はまずhttp://www.google.comを検索してください。