Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Fixnumクラス

class Fixnum + Integer + Precision

クラスの継承リスト: Fixnum < Integer < Precision < Numeric < Comparable < Object < Kernel

要約

Bignum 同様、整数のクラスです。 演算の結果が Fixnum の範囲を越えた時には 自動的に Bignum に拡張されます。

マシンのポインタのサイズに収まる長さの固定長整数で、 ほとんどのマシンでは 31 ビット幅です。

破壊的な変更

Ruby の Fixnum クラスは immutable です。 つまり、オブジェクト自体を破壊的に変更することはできません。 Bignum も同様です。

例:

p 100000.class             # => Fixnum
p 100000 * 100000          # => 100000000
p (100000 * 100000).class  # => Bignum

特異メソッド

included(module_or_class) -> Precision

Precision をインクルードするクラスやモジュールに対してメソッド induced_from を自動的に定義します。

このメソッドは、Precision がインクルードされた時に呼ばれます。詳細はModule#included を参照してください。

[PARAM] module_or_class:
Precision をインクルードするクラスまたはモジュール
induced_from(num) -> Integer

num を Integer に変換した結果を返します。 引数が数値の場合は小数部が切り捨てられ、そうでない場合はTypeErrorをraiseします。

Integer.induced_from 1.4  #=> 1
Integer.induced_from 1.9  #=> 1
Integer.induced_from -1.9 #=> -1
Integer.induced_from '1'  #=> TypeError

include している Precision モジュールの Precision.induced_from を 上書きしています。

[PARAM] num:
数値
[RETURN]
数値
induced_from(number) -> object

number を自分のクラスに変換した結果を返します。

デフォルトの定義は、例外 TypeError を発生させるので、 Mix-in したクラスでこのメソッドを再定義する必要があります。 再定義に、Precision#prec を使うと、 無限ループになる可能性があります。

[PARAM] number:
変換元の数値
[EXCEPTION] TypeError:
Mix-inしたクラスでこのメソッドが再定義されていない場合に発生します。

インスタンスメソッド

self % other -> Fixnum | Bignum | Float

算術演算子。剰余を計算します。

[PARAM] other:
二項演算の右側の引数(対象)
[RETURN]
計算結果
self & other -> Fixnum | Bignum

ビット二項演算子。論理積を計算します。

[PARAM] other:
数値
1 & 1 #=> 1
2 & 3 #=> 2
self * other -> Fixnum | Bignum | Float

算術演算子。積を計算します。

[PARAM] other:
二項演算の右側の引数(対象)
[RETURN]
計算結果
self ** other -> Fixnum | Bignum | Float

算術演算子。冪(べき乗)を計算します。

[PARAM] other:
二項演算の右側の引数(対象)
[RETURN]
計算結果
p 2 ** 3 # => 8
p 2 ** 0 # => 1
p 0 ** 0 # => 1
self ** other -> Integer | Float | Rational [redefined by rational]
rpower(other) -> Integer | Float | Rational [redefined by rational]

冪(べき)乗を計算します。other が 0 以下の場合、計算結果を Rational オブジェクトで返します。

[PARAM] other:
自身を other 乗する数
2.rpower(3)           # => 8
2.rpower(-3)          # => Rational(1, 8)
self ** other -> Rational | Float | Integer [redefined by rational]

冪(べき)乗を計算します。

[PARAM] other:
自身を other 乗する数

計算結果は以下のようになります。

  • otherが正または0の整数(Integer)ならば、整数(Integer)を返す。
  • otherが負の整数(Integer)ならば、有理数(Rational)を返す。
  • otherが有理数(Rational)や浮動小数(Float)ならば、浮動小数(Float)を返す。

例:

2 **  3             #=> 8
2 ** -3             #=> Rational(1, 8)
2 ** Rational(3)    #=> 8.0
2 ** Rational(1, 2) #=> 1.4142135623731
self + other -> Fixnum | Bignum | Float

算術演算子。和を計算します。

[PARAM] other:
二項演算の右側の引数(対象)
[RETURN]
計算結果
self - other -> Fixnum | Bignum | Float

算術演算子。差を計算します。

[PARAM] other:
二項演算の右側の引数(対象)
[RETURN]
計算結果
self / other -> Fixnum | Bignum | Float

算術演算子。商を計算します。

[PARAM] other:
二項演算の右側の引数(対象)
[RETURN]
計算結果
self / other [redefined by mathn]

[TODO]

Fixnum#quo と同じ働きをします(有理数または整数を返します)。

self / other -> Rational | Float | Integer [redefined by rational]

商を計算します。

[PARAM] other:
自身を割る数

計算結果は以下のようになります。

  • otherが有理数(Rational)ならば、有理数(Rational)を返す。
  • otherがそれ以外なら、Integer#/と同じ。つまり、 other が整数(Integer)ならば、整数(Integer)を(整除)、浮動小数(Float)ならば、 浮動小数(Float)を返す。 ただし、いずれも、other == 0 の時は、ZeroDivisionErrorとなる。
[EXCEPTION] ZeroDivisionError:
other が 0 の時に発生します。
self < other -> bool

比較演算子。数値として小さいか判定します。

[PARAM] other:
比較対象の数値
[RETURN]
self よりも other が大きい場合 true を返します。 そうでなければ false を返します。
self << bits -> Fixnum | Bignum

シフト演算子。bits だけビットを左にシフトします。

[PARAM] bits:
シフトさせるビット数
printf("%#b\n", 0b0101 << 1) #=> 0b1010
p -1 << 1 #=> -2
self <= other -> bool

比較演算子。数値として等しいまたは小さいか判定します。

[PARAM] other:
比較対象の数値
[RETURN]
self よりも other の方が大きい場合か、 両者が等しい場合 true を返します。 そうでなければ false を返します。
self <=> other -> Fixnum

self と other を比較して、self が大きい時に正、 等しい時に 0、小さい時に負の整数を返します。

[PARAM] other:
比較対象の数値
[RETURN]
-1 か 0 か 1 のいずれか
1 <=> 2 #=> -1
1 <=> 1 #=> 0
2 <=> 1 #=> 1
self == other -> bool

比較演算子。数値として等しいか判定します。

[PARAM] other:
比較対象の数値
[RETURN]
self と other が等しい場合 true を返します。 そうでなければ false を返します。
self > other -> bool

比較演算子。数値として大きいか判定します。

[PARAM] other:
比較対象の数値
[RETURN]
self よりも other の方が小さい場合 true を返します。 そうでなければ false を返します。
self >= other -> bool

比較演算子。数値として等しいまたは大きいか判定します。

[PARAM] other:
比較対象の数値
[RETURN]
self よりも other の方が小さい場合か、 両者が等しい場合 true を返します。 そうでなければ false を返します。
self >> bits -> Fixnum | Bignum

シフト演算子。bits だけビットを右にシフトします。

右シフトは、符号ビット(最上位ビット(MSB))が保持されます。 bitsが実数の場合、小数点以下を切り捨てた値でシフトします。

[PARAM] bits:
シフトさせるビット数
printf("%#b\n", 0b0101 >> 1) #=> 0b10
p -1 >> 1 #=> -1
self[nth] -> Fixnum

nth 番目のビット(最下位ビット(LSB)が 0 番目)が立っている時 1 を、そうでなければ 0 を返します。

[PARAM] nth:
何ビット目を指すかの数値
[RETURN]
1 か 0

self[nth]=bit (つまりビットの修正) がないのは、Numeric 関連クラスが immutable であるためです。

self ^ other -> Fixnum | Bignum

ビット二項演算子。排他的論理和を計算します。

[PARAM] other:
数値
1 ^ 1 #=> 0
2 ^ 3 #=> 1
chr -> String

文字コードに対応する 1 バイトの文字列を返します。

例えば65.chr は "A" を返します。

逆に文字列から文字コードを得るには "A"[0] とします

[RETURN]
1バイト文字列
[EXCEPTION] RangeError:
self が 0 から 255 の範囲外の場合に発生します。

[SEE_ALSO] String#[]

downto(min) {|n| ... } -> self
downto(min) -> Enumerable::Enumerator

self から min まで 1 ずつ減らしながらブロックを繰り返し実行します。 self < min であれば何もしません。

[PARAM] min:
数値
[RETURN]
self を返します。

[SEE_ALSO] Integer#upto, Numeric#step, Integer#times

even? -> bool

自身が偶数であれば真を返します。 そうでない場合は偽を返します。

id2name -> String | nil

オブジェクトの整数値 self を、ある Symbol オブジェクトに対応する整数値とみなした上で、 そのシンボルを示す文字列を返します。 整数に対応するシンボルは必ずしも存在せず、その場合は nil を返します。

Symbol#to_i の逆変換のようですが、 返すのはシンボルではなく文字列です。

[RETURN]
オブジェクト名を示す文字列か nil

例:

:foo.to_i      #=> 14585
14585.id2name  #=> "foo"
1.id2name      #=> nil

Fixnum#to_sym で得たシンボルに対して Symbol#to_s で文字列にしたものとおおかた一致しますが、 nil のときの挙動が異なります。

例:

1.id2name     #=> nil
1.to_sym.to_s #=> ""
integer? -> true

常に真を返します。

next -> Fixnum | Bignum
succ -> Fixnum | Bignum

self の次の整数を返します。

odd? -> bool

自身が奇数であれば真を返します。 そうでない場合は偽を返します。

ord -> Integer

自身を返します。

10.ord    #=> 10
?a.ord    #=> 97
prec(klass) -> object

self を精度 klass に変換した結果を返します。

デフォルトの定義では klass.induced_from(self) を呼び出し、 その結果を返します。

新しく精度クラスを作るときは組み込みクラスの Precision.induced_from を変更するのではなく、この prec の再定義で対応するべきです。

[PARAM] klass:
精度を持つ数値クラス
prec_f -> Float

self を Float に変換します。 prec(Float) と等価です。

prec_i -> Fixnum

self を Integer に変換します。 prec(Integer) と等価です。

pred -> Integer

self から -1 した値を返します。

1.pred      #=> 0
(-1).pred   #=> -2
quo(other) -> Rational [redefined by rational]

商を計算して計算結果を Rational オブジェクトで返します。

[PARAM] other:
自身を割る数

例:

1.quo(2)              # => Rational(1,2)
size -> Fixnum

整数の実装上のサイズをバイト数で返します。

現在の実装では Fixnum は、sizeof(long) 固定(多くの 32 bit マシンで 4 バイト)、Bignumは、システム依存です。

p 1.size
p 0x1_0000_0000.size
# => 4
     8
times {|n| ... } -> self
times -> Enumerable::Enumerator

self 回だけ繰り返します。 self が正の整数でない場合は何もしません。

またブロックパラメータには 0 から self - 1 までの数値が渡されます。

3.times { puts "Hello, World!" }  # Hello, World! と3行続いて表示される。
0.times { puts "Hello, World!" }  # 何も表示されない。
5.times {|n| print n }            # 01234 と表示される。

[SEE_ALSO] Integer#upto, Integer#downto, Numeric#step

to_f -> Float

値を浮動小数点数(Float)に変換します。

to_i -> self
to_int -> self

self を返します。

to_s -> String
to_s(base) -> String

整数を 10 進文字列表現に変換します。

引数を指定すれば、それを基数とした文字列表 現に変換します。

p 10.to_s(2)    # => "1010"
p 10.to_s(8)    # => "12"
p 10.to_s(16)   # => "a"
p 35.to_s(36)   # => "z"
[RETURN]
数値の文字列表現
[PARAM] base:
基数となる 2 - 36 の数値。
[EXCEPTION] ArgumentError:
base に 2 - 36 以外の数値を指定した場合に発生します。
to_sym -> Symbol | nil

オブジェクトの整数値 self に対応する Symbol オブジェク トを返します。整数に対応するシンボルが存在しない時には nil を返します。

Symbol#to_i の逆変換ととらえることができます。

[RETURN]
シンボルか nil

例:

:foo.to_i     #=> 14585
14585.to_sym  #=> :foo
1.to_sym      #=> nil
upto(max) {|n| ... } -> Fixnum | Bignum
upto(max) -> Enumerable::Enumerator

self から max まで 1 ずつ増やしながら繰り返します。 self > max であれば何もしません。

[PARAM] max:
数値
[RETURN]
self を返します。

[SEE_ALSO] Integer#downto, Numeric#step, Integer#times

self | other -> Fixnum | Bignum

ビット二項演算子。論理和を計算します。

[PARAM] other:
数値
1 | 1 #=> 1
2 | 3 #=> 3
~ -> Fixnum | Bignum

ビット演算子。否定を計算します。

~1  #=> -2
~3  #=> -4
~-4 #=> 3
class Fixnum