该浮点数小数部分的前 32 位是多少?

2024-03-19

我正在看以下内容SHA256 伪代码 http://en.wikipedia.org/wiki/SHA-2#SHA-256_.28a_SHA-2_variant.29_pseudocode在维基百科上。

具体来说,我正在查看以下部分。

//Initialize variables
//(first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):
h0 := 0x6a09e667

我想弄清楚 h0 是如何生成的。我从评论中知道这应该是 2 的平方根的小数部分。我相信我可以通过输入以下内容获得 2 的平方根的小数部分。以下所有代码均来自 python repl.

>>> math.modf(math.sqrt(2))[0]
0.41421356237309515

在文件的顶部,它声明所有常量的声明都是 Big Endian。我知道我的环境是小端,因为我打字。

>>> import sys
>>> sys.byteorder
'little'

因此,根据我对 h0 中的十六进制值的手动操作,Little Endian 表示形式应该是 0x67e6096a。

>>> int(0x67e6096a)
1743128938

我被困住了。我尝试过各种操作,但没有一个最终得到这个结果。我不知道如何获取浮点数小数部分的前 32 位。我知道我的 0.41421356237309515 (float) 结果可以以某种方式转换为 1743128938 (int),但我真的不知道如何转换。获取浮点数小数部分的前 32 位需要执行哪些步骤?请只用Python 回答。

谢谢。


  1. 在 Windows 上使用计算器计算 sqrt(2) (1.4142135623730950488016887242097)
  2. 取小数部分(0.4142135623730950488016887242097)
  3. 乘以 2^32 (1779033703.9520993849027770600526)
  4. 以十六进制表示整个部分 (6A09E667)

瞧。 (向 OP 道歉,因为没有做 Python 回答,但我希望该方法是清楚的。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

该浮点数小数部分的前 32 位是多少? 的相关文章

随机推荐