大家帮帮忙~hash << 5 + hash 中的<<とはどういうことですか?
[code=PHP][/code]static inline ulong zend_inline_hash_func(char *arKey, uint nKeyLength)
{
register ulong hash = 5381;
/* ハッシュを 8 回展開したバリアント */
for (; nKeyLength >= 8; nKeyLength -= 8 {
hash = ((hash << 5) + hash ) + *arKey++;
ハッシュ = ((ハッシュ << 5) + ハッシュ) + *arKey++;
ハッシュ = ((ハッシュ << 5) + ハッシュ) + *arKey++;
ハッシュ = ((ハッシュ << 5) + ハッシュ) + *arKey++;
ハッシュ = ((ハッシュ << 5) + ハッシュ) + *arKey++;
ハッシュ = ((ハッシュ << ; 5) + ハッシュ) + *arKey++;
ハッシュ = ((ハッシュ << 5) + ハッシュ) + *arKey++;
ハッシュ = ((ハッシュ << 5) + ハッシュ) + * arKey++;
}
switch (nKeyLength) {
case 7: hash = ((hash << 5) + hash) + *arKey++; /* フォールスルー... */
case 6: ハッシュ = ((ハッシュ << 5) + ハッシュ) + *arKey++; /* フォールスルー... */
ケース 5: ハッシュ = ((ハッシュ << 5) + ハッシュ) + * arKey++; /* フォールスルー... */
ケース 4: ハッシュ = ((ハッシュ << 5) + ハッシュ) + *arKey++; /* フォールスルー... */
ケース 3: ハッシュ = ((ハッシュ << 5) + ハッシュ) + *arKey++; /* フォールスルー... */
ケース 2: ハッシュ = ((ハッシュ << 5) + ハッシュ) + *arKey++; /* フォールスルー... */
ケース 1: ハッシュ = ((ハッシュ << 5) + ハッシュ) + *arKey++; Break;
case 0: Break;
EMPTY_SWITCH_DEFAULT_CASE()
}
return hash;
}
------解決策--- -----------------
は位移
php移位运算 lz 参考:http://apps.hi.baidu.com/シェア/詳細/23928402
-----解解案案---------
$a & $b And(位と) $a と $b の中間を 1 とする。 $a | $b Or(位または) $a または $b の中間が 1 の位を 1 に設定します。 $a ^ $b Xor(桁または) $a と $b の中の異なる桁を 1 に設定します。 ~ $a Not(按位非) $a 中の位は 0 に設定されますが、反抗的です。 $a << $b Shift left(左シフト) $a の中のビットを $b 次に左に移動します(1 回の移動は「2 以降」を示します)。 $a >> $b Shift right(右シフト) $a の真ん中のビットを $b を右に移動します(毎回の移動は「2 以降」を示します)。
------解决方案---------
长见识了……
------解决方案---------
是的,但是位置移只能做乘除法