ruby - float 和符号如何具有直接值(value)?

标签 ruby unsigned-integer

一位 StackOverflow 用户告诉我 Float现在在 Ruby 中具有直接值(value)。但是,我对如何实现这一点感到困惑。

我也很困惑Symbol s 可以立即产生值(value)。

据我所知,具有立即值的对象是其整个状态信息可以封装到 unsigned long 中的对象。 C 变量名为 VALUE .

当考虑小整数( Fixnum s)和像 true 这样的琐碎事情时,我可以直观地理解这是如何实现的。 false nil等等

但是,Float 没有长度限制和 Symbol那么,这些对象如何在没有自己的结构的情况下表示?

最佳答案

首先,Float 有长度限制 - Float 基本上是 native double 浮点值,即 64 位。但这仍然太多了,因此仅当尾数不太大时 Float 才是立即值(您可以看到确切的条件 here )。

对于符号,有一个数据结构枚举所有创建的符号,因此它们可以被称为该表中的偏移量(在 ruby​​ 2.2 上只有一些符号是这样的 - 那些不是“正常”的符号,垃圾收藏品)。

关于ruby - float 和符号如何具有直接值(value)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29333873/

相关文章:

mysql - 在 MySQL 上更新无符号 INT 失败并出现低值

arrays - ruby 将数组分配给另一个变量,当从该分配变量中删除元素时,也会在原始数组上删除

ruby-on-rails - 从 Rails 上的哈希 ruby​​ 访问多个值

ruby-on-rails - 为什么我不需要使用 Rails binstub 来运行正确的版本?

javascript - Ember ownsTo 关系在保存时传递为 nil 到服务器

java - 将 32 位无符号整数(大端)转换为长整数并返回

java - 如何检测Java中 "unsigned"长乘法的溢出?

ruby-on-rails - 由于空间适配器错误,Heroku 将无法启动

c++ - 在指针中存储无符号整数

c++ - 避免被无符号整数除法签名