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