这是Programming Ruby(2nd)中的Charpter 5的第一个有关number的程序实例,如下:
num=81
6.times do
puts "#{num.class}:#{num}"
num*=num
end 结果如下:
Fixnum:81
Fixnum:6561
Fixnum:43046721
Bignum:1853020188851841
Bignum:3433683820292512484657849089281
Bignum:11790184577738583171520872861412518665678211592275841109096961
其中有Fixnum和Bignum,为什么?原因:机器指针可处理的定长整数. 大部分机器是31bit. 若运算结果超出Fixnum
范围的话,自动将其变换为Bignum.之下是PR书上的一段原话:Ruby supports integers and floating-point numbers. Integers can be any length(up to a maximum determined by the amount of free memory on your system). Integers within a certain range (normally -2的30次方到2的30次方-1或者-2的62次方到2的62次方-1)are held internally in binary form and are objects of class Fixnum. Integers outside this range are stored in objets of class Bignum(currently implemented as a variable-length set of short integers).
自己又减去了一些东西,看看与原来的程序有何不同:
num=81
6.times do
puts "#{num}" 去掉了{num.class},即不显示数类名:Fixnum和Bignum
num*=num
end
81
6561
43046721
1853020188851841
3433683820292512484657849089281
11790184577738583171520872861412518665678211592275841109096961
也可以写成:
num=81
6.times do
puts num
num*=num
end
结果与上同
自总结:一个程序,可以去掉一些东西,看看与原来有什么不同。一定要理解通透,这样的话,能够旁枝末节地学到其它东西。
评论