3
神奇的數字在這種情況下0x9e3779b9,這臺10是2654435769.沒有任何理由爲什麼代碼爲什麼升壓幻數::在十六進制指定hash_combine
seed ^= hash_value(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
使用十六進制表示而不是基地10代表?如果2654435769替代代碼中的0x9e3779b9,功能是否保持相同?
神奇的數字在這種情況下0x9e3779b9,這臺10是2654435769.沒有任何理由爲什麼代碼爲什麼升壓幻數::在十六進制指定hash_combine
seed ^= hash_value(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
使用十六進制表示而不是基地10代表?如果2654435769替代代碼中的0x9e3779b9,功能是否保持相同?
文字是文字,同一文字的不同表示是......字面上相同。
但是,表達式(文字或不是)也有類型。
等價的字面意思應該是2654435769u
(注意類型後綴使它成爲unsigned
)。
看這個簡單的測試Live On Coliru
0x9e3779b9
具有類型unsigned int
(32位)和2654435769
已long
(64位)2654435769u
具有類型unsigned int
(32位)再次鍵入正如你所看到的,十六進制表示有利於無符號,十進制表示有利於有符號,使得類型變大¹。
¹native整型尺寸實現定義
(除了類型,人們可以說,也許,也許,位分配是十六進制,八進制或最終二進制表示稍微更加明顯)
類似問題:http://stackoverflow.com/questions/4948780/magic-number-in-boosthash-combine – 2014-11-04 03:57:56