なぜ2つの関数が異なる結果をもたらすのか不思議です。この場合、h * = h * 101 + s [i]とh = h * 101 + s [i]が異なるのはなぜですか?
unsigned long Hash1(const string s)
{
int length = s.length();
unsigned long h = 1;
for (int i = 0; i < length; i++)
h *= 101 + (unsigned long)s[i];
return h;
}
unsigned long Hash2(const string s)
{
int length = s.length();
unsigned long h = 1;
for (int i = 0; i < length; i++)
h = h * 101 + (unsigned long)s[i];
return h;
}
int main()
{
cout << "Value of hash1 = " << Hash1("[email protected]") << endl;
cout << "Value of hash2 = " << Hash2("[email protected]") << endl;
system("pause");
return 0;
}
はh *= 101 + (unsigned long)s[i]
がto h = h * 101 + (unsigned long)s[i]
等しいではないですか?
これが出力されます:HASH2の
HASH1の価値 = 1693843456
値 = 2162085645
はあなたの助けをありがとう!
http://en.cppreference.com/w/cpp/language/operator_precedence – chris
あなたは 'h * = 101'や' h = h * 101'を持っていません。あなたは 'h * = 101 +(unsigned long)s [i]'と 'h = h * 101 +(unsigned long)s [i]'を持っています。 – user2357112
あなたは実際にそれを伝えています。 'h = h *(101 + s [i])' ..つまり、h =自体に右側の式全体が乗算されます。 – Brandon