gpt4 book ai didi

c++ - 为什么 boost::hash_combine 中的魔数(Magic Number)是十六进制指定的

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:42 26 4
gpt4 key购买 nike

本例中的魔数(Magic Number)是 0x9e3779b9,以 10 为基数是 2654435769。代码有什么原因吗

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

使用十六进制表示而不是 base-10 表示?如果将代码中的 0x9e3779b9 替换为 2654435769,功能是否会保持不变?

最佳答案

字面量就是字面量,同一字面量的不同表示形式……字面上相同。

但是,表达式(文字或非文字)也有一个类型

等效的字面量应该是 2654435769u(注意类型后缀使其成为 unsigned)。

看看这个简单的测试 Live On Coliru

  • 0x9e3779b9 具有类型 unsigned int(32 位)和
  • 2654435769 的类型为 long(64 位)
  • 2654435769u 再次具有类型 unsigned int(32 位)

如您所见,十六进制表示倾向于无符号,十进制表示倾向于有符号,使类型更大¹。


¹ native 整数大小是实现定义的

(除了类型之外,有人可能会争辩说,也许,也许,位分布在十六进制、八进制或最终的二进制表示中稍微更明显)

关于c++ - 为什么 boost::hash_combine 中的魔数(Magic Number)是十六进制指定的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26705751/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com