整數
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]