整数
Ruby内置的数值类型分为整数对象(Integer)和浮点小数对象(Float)。
在其他的语言中,整数的长度一般被限定在32bit或者62bit,在Ruby的整数中,没有这样的限制,只要内存允许,任意无限长的整数都可以被使用。
例1
#正整数 p 1 #负整数 p -2 #表明符号的正整数 p +1 #非常大的整数 p 1000000000000000000000000000000 #便于阅读的格式,加了下划线 p 100_000_000_000
记录的数值一般来说都按十进制来解释。若需要二进制、八进制、十六进制的数字时,需在开头添加相应的记号
例2
#用0x表示十六进制整数 p 0xDEADBEEF #负的十六进制整数 p -0xCAFE #方便阅读的长十六进制整数 p 0xDEAD_BEEF_CAFE_BABE #用0开头的数表示八进制整数 p 01755 #用0b开头表示二进制数 p 0b1010111 #输出结果 #3735928559 #-51966 #16045690984503098046 #1005 #87
Fixnum和Bignum类
查看整数对象的所属类时,会发现并不属于Integer而是Fixnum或者Bignum这两个类。
Fixnum和Bignum是Integer的子类。
Fixnum是内部用固定长度来实现的整数,能够高效地处理比较小的整数。
Bignum是多倍长度的整数,可以用来定义任意大的整数。
Ruby在进行整数运算时,会自动区分是使用Fixnum还是Bignum。
例3
p 0x3FFFFFFF.class p (0x3FFFFFFF+0x3FFFFFFF).class p 0x40000000.class p (0x40000000-1).class #输出结果 #Fixnum #Bignum #Bignum #Fixnum
浮点数
和其它语言一样,Ruby也使用浮点数来近似地表示一切实数。浮点数都是Float对象。
数值运算
数值对象之间有各种各样的运算。
例如,
10+2
5.25-7
4*5
3**5(乘方)
除法运算
在Ruby中根据运算对象的不同进行不同的操作。
如除法运算“/",两边同为Integerdui对象,运算符”/“进行整除运算;若任意一方为Float对象,则进行实数的除法运算。
例如,
7/2 #整除
7.0/2 #实数间的除法运算
符号操作
例如,
a = -3.0 #符号-表示负数
-a #符号取反
优先级
优先级用()来明确标定
其它运算符
例如,
-7.divmod(2) #对-7进行整除和求余运算
-3.1416.abs #取绝对值
0.5772.ceil #大于或等于该数的最小整数
类型和自动转换
Ruby是对附属类型要求很严格的编程语言,数据类型一般不会自动变换。
与Perl等不同,1+”2“这样的运算不会返回3而是会报错。
字符串不会自动地转换为数值,类型的转化需要使用方法to_i进行明确标明。
而整数和浮点数的运算会发生自动转换是特例之一。
to_i #变换为整数
to_f #变换为浮点数
当需要用到更多的数值类型或代数系统时,只需要引入相应的类库进行扩展即可。
比较
Ruby中的比较运算符有<,>,<=,>=,==,!=,<=>等。
其中<=>称为宇宙飞船运算符。
运算符的左边和右边的值进行比较,
左边<右边,返回负值
左边=右边,返回0
左边>右边,返回正数
例如,
1<=>2 #=>-1
2<=>2 #=>0
3<=>2 #=>1
宇宙飞船运算符主要用于排序。数组等的sort方法一般默认用<=>运算符对各元素大小进行判定。
数学函数
例如,
Math.acos(x) #反余弦函数
Math.log(x) #自然对数
对函数的调用一般不用”.“,而用”::“
Math::sqrt(x) #平方根
Math::E #自然对数的底
Math::PI #圆周率
如果Math模块在作用域中被include,则可以对函数进行直接调用。
例如,
Include Math
cos(0)
log10(2)
比特运算(位运算)
例,
a = 0b1100 b = 0b1010 #与运算 p a&b #或运算 p a|b #与或运算 p a^b #非运算 p ~a #左移运算 p a<<1 #右移运算 p a>>1 #负的左移运算 p a<<-1 #取比特位 p a[0]