我不明白在下面的代码中运营商“< <”是什么意思。什么是C++中的“<<”运算符?
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);
}
我不明白在下面的代码中运营商“< <”是什么意思。什么是C++中的“<<”运算符?
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);
}
它是bit shift operator(在上一个long
变量此上下文中)一个。
它将所有位移位2位,导致乘以4(就像您将基数10数字中的两位数字乘以100一样)。概括地说,移位n位数将乘以2^n
)。例如:
unsigned int x = 0xA; // x = 1010 (10 base 10)
unsigned int y = x << 1; // y = 10100 (20 base 10)
可以由两个由位右移(即斩波一次性的端部)进行分割
unsigned int x = 0xA; // x = 1010 (10 base 10)
unsigned int y = x >> 1; // y = 101 (5 base 10)
司?还是乘法? –
@Ates Goral:Derp,我转移了错误的方式:)。谢谢。 –
两位移位导致乘法/除法4. –
它是在C位位移操作者++。
这是一个bitwise shift left
运营商,这意味着您分配h
值时移由两位由2有效乘以h
到2的幂左:
h << 2 == h * (2^2)
你可以找到更多关于它的信息here。
提示:下次搜索http://www.google.com首先。
谷歌的c + + <<运算符,你会很快发生偏移。 – ScarletAmaranth
它已经死了吉姆.. –
“这个问题没有显示任何研究工作。”嗯...... – ildjarn