在这种情况下,幻数是0x9e3779b9,在10的基数是2654435769.这个代码是否有任何原因
seed ^= hash_value(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
Run Code Online (Sandbox Code Playgroud)
使用十六进制表示而不是基数10表示?如果2654435769代替代码中的0x9e3779b9,功能是否仍然相同?
文字是文字,同一文字的不同表示......字面上完全相同.
但是,表达式(文字与否)也有一个类型.
等效的文字本来是2654435769u(注意制作它的类型后缀unsigned).
看看这个简单的测试 Live On Coliru
0x9e3779b9有类型unsigned int(32位)和2654435769有类型long(64位)2654435769uunsigned int再次输入类型(32位)正如您所看到的,十六进制表示有利于无符号,十进制表示有利于签名,使类型更大¹.
¹本机整数大小是实现定义的
(除了类型之外,人们可能会争辩说,或许,在十六进制,八进制或最终二进制表示中,位分布可能稍微明显一些)