我建立一個自定義的哈希在那裏我根據公式總結在字符串中的所有字母:C++編譯器是否能識別2的冪次?
string[0] * 65536 + string[1] * 32768 + string[2] * 16384 + ...
而且我已經來到了一個問題,我是否應該在int數組定義爲常量這樣,這些數字:
const int MULTIPLICATION[] = {
65536,
32768,
16384,
8192,
4096,
2048,
1024,
512,
256,
128,
64,
32,
16,
8,
4,
2,
1
}
或者,也許我應該只生成這些數據而計算哈希值本身(而可能失去由於他們一些速度沒有被已經產生的)? 我需要計算該哈希數百萬次,我想編譯器來了解主要的是,而不是正常的MUL操作
MOV EBX, 8
MUL EBX
它會做
SHL EAX, 3
編譯器不明白,如果我乘以2的冪來移位而不是通常的乘法?
另一個問題,我敢肯定,它確實移位時,你寫在C++ number * = 2; 但只是爲了澄清,是嗎?
謝謝,我已經找到了如何在調試器中查看dissasembly。是的,編譯器也明白,如果你使用它像
number *= 65536
但是轉移位,它只是做普通的乘法,如果你做
number1 = 65536
number *= number1;
通過熟悉調試器,您可以找到這些問題的答案。用它來打破你想知道的代碼,然後檢查當時的拆卸。 :) –
你爲什麼不問你的編譯器? –
沒有固定的答案,「編譯器會用shift來代替乘法」;這取決於您使用的編譯器,體系結構和可能的編譯器標誌。 – mah