zoukankan      html  css  js  c++  java
  • 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]
    
  • 相关阅读:
    Foundation与Core Foundation内存管理基本原则简述
    Quartz2D 图像处理
    XCode中的特殊快捷键图标
    UITableView的编辑模式
    Cocoa框架中的内存分区
    Cocoa 框架为什么采用两阶段的方式来创建对象?
    IOS中的内存不足警告处理(译)
    Caching和Purgeable Memory (译)
    3年后,我回来了
    POJ3632 Optimal Parking
  • 原文地址:https://www.cnblogs.com/enjoytesting/p/2581713.html
Copyright © 2011-2022 走看看