`
winteen
  • 浏览: 13043 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

[RubyHackingGuide]万物皆对象之Fixnum

    博客分类:
  • Ruby
阅读更多
Fixnum是实例可以内嵌在VALUE中的Ruby内置类之一.

INT2FIX宏将C中的int数值转换成VALUE
#define INT2FIX(i) ((VALUE)(((long)(i))<<1 | FIXNUM_FLAG))  
#define FIXNUM_FLAG 0x01  
(ruby.h)  

能内嵌到VALUE中的数值(等同于Fixnum所表示的数值)的有效bit数至多为:
sizeof(VALUE)*8-1(否则数值的符号位会因左移而丢失).
而Fixnum是有符号的,故整数部分的bit数至多为:
sizeof(VALUE)*8-2(扣掉符号位).

VALUE的值即是Ruby对象的ID

我们可以通过以下ruby程序"反推"出运行ruby的机器上VALUE的位数:
def size_of_VALUE
  (1..16).each do |size|
    return size if max_fixnum?(2**(size*8-2)-1)
  end
  raise "Bigger than 16!"
end

def fixnum?(num)
  (num.object_id == 2*num+1) ? true : false
end

def max_fixnum?(num)
  fixnum?(num)&&!fixnum?(num+1)
end
p size_of_VALUE


  • 大小: 6.5 KB
0
0
分享到:
评论

相关推荐

    Teach Yourself Scheme in Fixnum Days

    总结:《Teach Yourself Scheme in Fixnum Days》是一本全面覆盖Scheme编程语言基础与高级特性的教程,通过介绍各种数据类型、控制结构、递归、I/O操作、宏、对象系统、非确定性计算和高级控制流操作等,为读者提供...

    Teach.Yourself.Scheme.in.Fixnum.Days

    《Teach Yourself Scheme in Fixnum Days》是一本由Dorai Sitaram编写的经典书籍,旨在教授读者如何在有限的时间内掌握Scheme编程语言。Scheme是Lisp家族的一种方言,以其简洁性和灵活性而著称,是计算机科学教育和...

    Mit.Press-Teach.Yourself.Scheme.pdf (英文)

    S-表达式是Scheme中的基本数据结构之一,所有Scheme程序都可以被看作是S-表达式的集合。S-表达式可以是原子(如数字、字符串)或者是列表。 #### 三、表单 **3.1 函数** - **3.1.1 函数参数** 函数可以定义固定...

    ruby基础教程(第四版)第12章 数值类1

    `Fixnum`用于存储普通整数,而`Bignum`则用于处理超出`Fixnum`范围的大整数。Ruby会自动在两者之间切换,确保可以处理任意大小的整数。 2. **Float** 类:这个类代表浮点小数,用于处理带有小数部分的数值。Ruby...

    Ruby的语法和语言特性总结

    例如,数字4的类是`Fixnum`,可以通过`4.class`查看。`methods`方法可以列出对象支持的所有方法。Ruby的面向对象特性使得它可以灵活地进行类和方法的定义和操作。 1.2 流程控制 Ruby提供了多种流程控制结构,如`if`...

    Ruby编程语言_涵盖Ruby 1.8和1.9

    2. 元编程:Ruby的强大之处在于其内置的元编程能力,允许在运行时修改和创建类及对象。 3. 动态性:Ruby的动态性意味着可以在程序运行过程中改变类的行为,增加了代码的灵活性。 4. 块和闭包:Ruby的块和闭包提供了...

    rubyAPI文档

    5. 数据类型:包括字符串(`String`)、数字(`Fixnum`和`Bignum`)、符号(`Symbol`)、数组(`Array`)、哈希(`Hash`)等。 最后,`ruby19`可能包含了Ruby 1.9版本的整体API文档,这可能涵盖了`ruby19-stdlib`和...

    实例解析Ruby中的数值类型以及常量

    在这个范围内的整数是类 Fixnum 的对象,在这个范围外的整数存储在类 Bignum 的对象中。 您可以在整数前使用一个可选的前导符号,一个可选的基础指标(0 对应 octal,0x 对应 hex,0b 对应 binary),后跟一串数字。...

    Ruby-Fasterer利用这个命令行工具让你的Rubies变得更快

    6. **使用`Fixnum`和`Bignum`而不是`Integer`**:Ruby 2.4及更高版本中的`Integer`会自动处理`Fixnum`和`Bignum`,但在早期版本中,明确指定类型可能会提高性能。 7. **避免使用`eval`和`instance_eval`**:这两个...

    浮点数转定点数Verilog

    相比之下,定点数虽然动态范围较小,但其实现更为简单,占用资源较少,因此在FPGA设计中常常需要将浮点数转换为定点数。本篇文档将详细介绍一个将32位浮点数转换为18位定点数的Verilog代码,并深入分析其工作原理及...

    hstore-document:使用 Hstore 在 PostgreSQL 上的 ActiveRecord 中嵌入文档

    这个 gem 允许使用 Hstore 在 ActiveRecord::Base 模型中嵌入辅助对象。 这将 Mongo 的嵌入式文档的优点带到了 PostgreSQL。 它以 Mongoid 的嵌入文档为模型。 一个例子胜过千言万语: class Person &lt; ...

    ruby参考速查--ruby常用类参考

    首先,我们来看`Array`类,它是Ruby中最常见的数据结构之一,用于存储有序的元素集合。Array类包含了许多方便的方法,如: 1. `&` 运算符用于计算两个数组的交集。例如 `[1, 2, 3] & [2, 3, 4]` 返回 `[2, 3]`。 2....

    ruby扫描整理电子版

    每个数值都是一个特定类的对象,比如`Fixnum`和`Float`。 显示数值的方式与显示字符串相似,可以使用`print`或`puts`方法。例如,`print(10)`或`puts(10)`会在控制台上输出整数10。在Ruby中,进行四则运算时遵循...

    ruby语言基础教程.pptx(共17页,携程内部培训版)

    - **Ruby入门书籍推荐**: 推荐初学者阅读《Ruby Programming 向Ruby之父学程序设计(第2版)》,由(日)高桥征义、(日)后藤裕藏著,(日)松本行弘审订。 2. **常用Ruby开发工具** - **文本编辑器**: 任何文本...

    Ruby基础知识之数据类型

    字符串操作方面,Ruby支持使用“+”来连接字符串(需要将非字符串对象通过to_s方法转换),使用“”则是在原字符串对象上追加内容,不会生成新对象。使用“*”可以实现字符串的重复。字符串截取可以通过索引访问,...

    convert string to integer

    `to_i`是Ruby字符串对象的一个方法,它尝试将字符串解析为一个整数。例如: ```ruby str = "123" num = str.to_i puts num # 输出:123 ``` 在这个例子中,`to_i`方法会忽略字符串开头的空格,并尝试从字符串的...

    ruby语言基础教程.ppt

    1. Ruby语言的基本概念和特性,包括其脚本语言、面向对象、跨平台和开放源码软件的性质。 2. 如何使用文本编辑器编写Ruby代码,并了解常用的Ruby开发工具,如ScITE、Eclipse (使用RDT插件)、NetBeans等。 3. Ruby中...

    Ruby 数据类型

    Ruby 数据类型 本章节我们将为大家介绍 Ruby 的基本数据类型。...整数范围从 -230 到 230-1,在这个范围内的整数是类 Fixnum 的对象, 当整数值大于或等于2的30次方时( -262 到 262-1),会自动转化为 Bignum 类型。

Global site tag (gtag.js) - Google Analytics