-5

这里的任何人都可以帮助我了解以下浮点指令如何在 Ruby 中使用packing() and unpacking()方法工作吗?

  • D and d
  • F and f
  • g and G
  • e and E

我在下面尝试过:

irb(main):001:0> [2,44,43].pack('D')
=> "\x00\x00\x00\x00\x00\x00\x00@"
irb(main):002:0> [2,44,43].pack('d')
=> "\x00\x00\x00\x00\x00\x00\x00@"
irb(main):004:0> [2,44,43].pack('ddd')
=> "\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00F@\x00\x00\x00\x00\x00\
x80E@"
irb(main):005:0> [2,44,43].pack('fff')
=> "\x00\x00\x00@\x00\x000B\x00\x00,B"
irb(main):006:0> [2,44,43].pack('FFF')
=> "\x00\x00\x00@\x00\x000B\x00\x00,B"
irb(main):007:0> [2,44,43].pack('ggg')
=> "@\x00\x00\x00B0\x00\x00B,\x00\x00"
irb(main):008:0> [2,44,43].pack('GGG')
=> "@\x00\x00\x00\x00\x00\x00\x00@F\x00\x00\x00\x00\x00\x00@E\x80\x00\x00\x00\x0
0\x00"
irb(main):009:0>

输出是怎么来的?这种计算的逻辑是什么?

提前致谢!

4

1 回答 1

1

这些指令将数组中的数字转换为浮点字节表示。

如果您想了解正在发生的事情,可以观看此视频:

浮点表示:示例
https://www.youtube.com/watch?v=t-8fMtUNX1A

并阅读这篇文章:
http ://www.geeksforgeeks.org/floating-point-representation-basics/

通过谷歌,我通过搜索“浮点表示”为您找到了上述答案。


只是给你一个例子:

> [2.0].pack('f').bytes.map(&:to_i)
=> [0, 0, 0, 64]

这是一个浮点数,以十六进制表示为:

0x40000000

你可以在哪里看到它640x40十六进制的。

为了理解为什么2.0会变成0x40000000你必须了解计算机如何将浮点数转换为二进制表示。

您可以使用此页面对其进行测试:
http ://www.h-schmidt.net/FloatConverter/IEEE754.html

例如,这里是这样的2.0

http://i.imgur.com/qWqFM.png

于 2013-01-12T19:49:19.713 回答