ホームページ > バックエンド開発 > PHPチュートリアル > 助けてください~ハッシュ << 5 + ハッシュの << は何を意味しますか?

助けてください~ハッシュ << 5 + ハッシュの << は何を意味しますか?

WBOY
リリース: 2016-06-13 13:35:28
オリジナル
1142 人が閲覧しました

大家帮帮忙~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
-----解解案案---------

PHP コード

$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 以降」を示します)。

------解决方案---------
长见识了……
------解决方案---------
是的,但是位置移只能做乘除法

探讨

额 非常に感谢了 但し有一问题~ 恩~以 位 来做相应的运算 有何么好处? 运算速度有关吗?
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート