2014-11-02 30 views
3

神奇的數字在這種情況下0x9e3779b9,這臺10是2654435769.沒有任何理由爲什麼代碼爲什麼升壓幻數::在十六進制指定hash_combine

seed ^= hash_value(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2); 

使用十六進制表示而不是基地10代表?如果2654435769替代代碼中的0x9e3779b9,功能是否保持相同?

+0

類似問題:http://stackoverflow.com/questions/4948780/magic-number-in-boosthash-combine – 2014-11-04 03:57:56

回答

5

文字是文字,同一文字的不同表示是......字面上相同。

但是,表達式(文字或不是)也有類型

等價的字面意思應該是2654435769u(注意類型後綴使它成爲unsigned)。

看這個簡單的測試Live On Coliru

  • 0x9e3779b9具有類型unsigned int(32位)和
  • 2654435769long(64位)
  • 2654435769u具有類型unsigned int(32位)再次鍵入

正如你所看到的,十六進制表示有利於無符號,十進制表示有利於有符號,使得類型變大¹。


¹native整型尺寸實現定義

(除了類型,人們可以說,也許,也許,位分配是十六進制,八進制或最終二進制表示稍微更加明顯)

相關問題