Ruby入門——數值


整數

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]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM