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

class Integer

クラスの継承リスト: Integer < Numeric < Comparable < Object < Kernel < BasicObject
aliases: Fixnum, Bignum
dynamic include: JSON::Generator::GeneratorMethods::Integer (by json)

要約

整数クラスです。

整数オブジェクトに特異メソッドを追加する事はできません。追加した場合、 TypeError が発生します。

2.4.0 から Fixnum, Bignum は Integerに統合されました。 2.4.0 からはどちらも Integer クラスのエイリアスとなっています。

目次

特異メソッド
sqrt
インスタンスメソッド
% modulo & * ** pow + - -@ / div < << <= <=> == === > >= >> [] ^ abs magnitude allbits? anybits? bit_length ceil chr denominator digits divmod downto even? fdiv floor gcd gcdlcm inspect to_s integer? lcm next succ nobits? numerator odd? ord pred rationalize remainder round size times to_f to_i to_int to_r truncate upto | ~

特異メソッド

sqrt(n) -> Integer[permalink][rdoc]

非負整数 n の整数の平方根を返します。すなわち n の平方根以下の 最大の非負整数を返します。

[PARAM] n:
非負整数。Integer ではない場合は、最初に Integer に変換されます。
[EXCEPTION] Math::DomainError:
n が負の整数の時に発生します。

Integer.sqrt(0)        # => 0
Integer.sqrt(1)        # => 1
Integer.sqrt(24)       # => 4
Integer.sqrt(25)       # => 5
Integer.sqrt(10**400) == 10**200 # => true

Math.sqrt(n).floor と同等ですが、後者は浮動小数点数の精度の限界によって 真の値とは違う結果になることがあります。


Integer.sqrt(10**46)     #=> 100000000000000000000000
Math.sqrt(10**46).floor  #=>  99999999999999991611392 (!)

[SEE_ALSO] Math.sqrt

インスタンスメソッド

self % other -> Numeric[permalink][rdoc]
modulo(other) -> Numeric

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

例:

# 剰余
13 % 4    # => 1
13 % -4   # => -3
-13 % 4   # => 3
-13 % -4  # => -1
[PARAM] other:
二項演算の右側の引数(対象)
[RETURN]
計算結果
self & other -> Integer[permalink][rdoc]

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

[PARAM] other:
数値

例:

1 & 1 # => 1
2 & 3 # => 2
self * other -> Numeric[permalink][rdoc]

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

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

例:

# 積
2 * 3   # => 6
self ** other -> Numeric[permalink][rdoc]
pow(other) -> Numeric
pow(other, modulo) -> Integer

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

[PARAM] other:
二項演算の右側の引数(対象)
[PARAM] modulo:
指定すると、計算途中に巨大な値を生成せずに (self**other) % modulo と同じ結果を返します。
[RETURN]
計算結果
[EXCEPTION] TypeError:
2引数 pow で Integer 以外を指定した場合に発生します。
[EXCEPTION] RangeError:
2引数 pow で other に負の数を指定した場合に発生します。

例:

2 ** 3 # => 8
2 ** 0 # => 1
0 ** 0 # => 1
 3.pow(3,  8) # => 3
 3.pow(3, -8) # => -5
 3.pow(2, -2) # => -1
-3.pow(3,  8) # => 5
-3.pow(3, -8) # => -3
 5.pow(2, -8) # => -7

[SEE_ALSO] BigDecimal#power

self + other -> Numeric[permalink][rdoc]

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

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

例:

# 和
3 + 4 # => 7
self - other -> Numeric[permalink][rdoc]

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

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

例:

# 差
4 - 1 #=> 3
- self -> Integer[permalink][rdoc]

単項演算子の - です。 self の符号を反転させたものを返します。

例:

- 10   # => -10
- -10  # => 10
self / other -> Numeric[permalink][rdoc]
div(other) -> Numeric

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

[PARAM] other:
二項演算の右側の引数(対象)
[RETURN]
計算結果
self < other -> bool[permalink][rdoc]

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

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

例:

1 < 1    # => false
1 < 2    # => true
self << bits -> Integer[permalink][rdoc]

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

[PARAM] bits:
シフトさせるビット数

例:

printf("%#b\n", 0b0101 << 1) # => 0b1010
p -1 << 1 # => -2
self <= other -> bool[permalink][rdoc]

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

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

例:

1 <= 0    # => false
1 <= 1    # => true
1 <= 2    # => true
self <=> other -> -1 | 0 | 1 | nil[permalink][rdoc]

self と other を比較して、self が大きい時に1、等しい時に 0、小さい時 に-1、比較できない時に nil を返します。

[PARAM] other:
比較対象の数値
[RETURN]
-1 か 0 か 1 のいずれか

例:

1 <=> 2 # => -1
1 <=> 1 # => 0
2 <=> 1 # => 1
self == other -> bool[permalink][rdoc]
self === other -> bool

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

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

例:

1 == 2      # => false
1 == 1.0    # => true
self > other -> bool[permalink][rdoc]

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

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

例:

1 > 0    # => true
1 > 1    # => false
self >= other -> bool[permalink][rdoc]

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

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

例:

1 >= 0    # => true
1 >= 1    # => true
1 >= 2    # => false
self >> bits -> Integer[permalink][rdoc]

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

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

[PARAM] bits:
シフトさせるビット数

例:

printf("%#b\n", 0b0101 >> 1) # => 0b10
p -1 >> 1 # => -1
self[nth] -> Integer[permalink][rdoc]

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

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

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

例:

a = 0b11001100101010
30.downto(0) do |n| print a[n] end
# => 0000000000000000011001100101010

a = 9**15
50.downto(0) do |n|
  print a[n]
end
# => 000101110110100000111000011110010100111100010111001
self ^ other -> Integer[permalink][rdoc]

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

[PARAM] other:
数値

例:

1 ^ 1 # => 0
2 ^ 3 # => 1
abs -> Integer[permalink][rdoc]
magnitude -> Integer

self の絶対値を返します。

例:

-12345.abs   # => 12345
12345.abs    # => 12345
-1234567890987654321.abs   # => 1234567890987654321
allbits?(mask) -> bool[permalink][rdoc]

self & mask の全てのビットが 1 なら true を返します。

self & mask == mask と等価です。

[PARAM] mask:
ビットマスクを整数で指定します。

42.allbits?(42)                   # => true
0b1010_1010.allbits?(0b1000_0010) # => true
0b1010_1010.allbits?(0b1000_0001) # => false
0b1000_0010.allbits?(0b1010_1010) # => false

[SEE_ALSO] Integer#anybits?

[SEE_ALSO] Integer#nobits?

anybits? -> bool[permalink][rdoc]

self & mask のいずれかのビットが 1 なら true を返します。

self & mask != 0 と等価です。

[PARAM] mask:
ビットマスクを整数で指定します。

42.anybits?(42)                   # => true
0b1010_1010.anybits?(0b1000_0010) # => true
0b1010_1010.anybits?(0b1000_0001) # => true
0b1000_0010.anybits?(0b0010_1100) # => false

[SEE_ALSO] Integer#allbits?

[SEE_ALSO] Integer#nobits?

bit_length -> Integer[permalink][rdoc]

self を表すのに必要なビット数を返します。

「必要なビット数」とは符号ビットを除く最上位ビットの位置の事を意味しま す。2**n の場合は n+1 になります。self にそのようなビットがない(0 や -1 である)場合は 0 を返します。

例: ceil(log2(int < 0 ? -int : int+1)) と同じ結果

(-2**12-1).bit_length     # => 13
(-2**12).bit_length       # => 12
(-2**12+1).bit_length     # => 12
-0x101.bit_length         # => 9
-0x100.bit_length         # => 8
-0xff.bit_length          # => 8
-2.bit_length             # => 1
-1.bit_length             # => 0
0.bit_length              # => 0
1.bit_length              # => 1
0xff.bit_length           # => 8
0x100.bit_length          # => 9
(2**12-1).bit_length      # => 12
(2**12).bit_length        # => 13
(2**12+1).bit_length      # => 13
ceil(ndigits = 0) -> Integer[permalink][rdoc]

self と等しいかより大きな整数のうち最小のものを返します。

[PARAM] ndigits:
10進数での小数点以下の有効桁数を整数で指定します。 負の整数を指定した場合、小数点位置から左に少なくとも n 個の 0 が並びます。

1.ceil           # => 1
1.ceil(2)        # => 1
18.ceil(-1)      # => 20
(-18).ceil(-1)   # => -10

[SEE_ALSO] Numeric#ceil

chr -> String[permalink][rdoc]
chr(encoding) -> String

与えられたエンコーディング encoding において self を文字コードと見た時、それに対応する一文字からなる文字列を返します。 引数無しで呼ばれた場合は self を US-ASCII、ASCII-8BIT、デフォルト内部エンコーディングの順で優先的に解釈します。

p 65.chr # => "A"
p 0x79.chr.encoding # => #<Encoding:US_ASCII>
p 0x80.chr.encoding # => #<Encoding:ASCII_8BIT>
p 12354.chr Encoding::UTF_8 # => "あ"
p 12354.chr Encoding::EUC_JP
# => RangeError: invalid codepoint 0x3042 in EUC-JP
p 12354.chr Encoding::ASCII_8BIT
# => RangeError: 12354 out of char range
p (2**32).chr
# => RangeError: bignum out of char range
[PARAM] encoding:
エンコーディングを表すオブジェクト。Encoding::UTF_8、'shift_jis' など。
[RETURN]
一文字からなる文字列
[EXCEPTION] RangeError:
self を与えられたエンコーディングで正しく解釈できない場合に発生します。

[SEE_ALSO] String#ord

denominator -> Integer[permalink][rdoc]

分母(常に1)を返します。

[RETURN]
分母を返します。

例:

10.denominator    # => 1
-10.denominator   # => 1

[SEE_ALSO] Integer#numerator

digits -> [Integer][permalink][rdoc]
digits(base) -> [Integer]

base を基数として self を位取り記数法で表記した数値を配列で返します。 base を指定しない場合の基数は 10 です。

16.digits # => [6, 1]
16.digits(16) # => [0, 1]

self は非負整数でなければいけません。非負整数でない場合は、Math::DomainErrorが発生します。

-10.digits # Math::DomainError: out of domain が発生
[RETURN]
位取り記数法で表した時の数値の配列
[PARAM] base:
基数となる数値。
[EXCEPTION] ArgumentError:
base に正の整数以外を指定した場合に発生します。
[EXCEPTION] Math::DomainError:
非負整数以外に対して呼び出した場合に発生します。
divmod(other) -> [Integer, Numeric][permalink][rdoc]

self を other で割った商 q と余り r を、 [q, r] という 2 要素の配列にし て返します。 商 q は常に整数ですが、余り r は整数であるとは限りません。

[PARAM] other:
self を割る数。

[SEE_ALSO] Numeric#divmod

downto(min) {|n| ... } -> self[permalink][rdoc]
downto(min) -> Enumerator

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

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

例:

5.downto(1) {|i| print i, " " } # => 5 4 3 2 1

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

even? -> bool[permalink][rdoc]

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

例:

10.even?    # => true
5.even?     # => false
fdiv(other) -> Numeric[permalink][rdoc]

self を other で割った商を Float で返します。 ただし Complex が関わる場合は例外です。 その場合も成分は Float になります。

[PARAM] other:
self を割る数を指定します。

[SEE_ALSO] Numeric#quo

floor(ndigits = 0) -> Integer[permalink][rdoc]

self と等しいかより小さな整数のうち最大のものを返します。

[PARAM] ndigits:
10進数での小数点以下の有効桁数を整数で指定します。 負の整数を指定した場合、小数点位置から左に少なくとも n 個の 0 が並びます。

1.floor           # => 1
1.floor(2)        # => 1
18.floor(-1)      # => 10
(-18).floor(-1)   # => -20

[SEE_ALSO] Numeric#floor

gcd(n) -> Integer[permalink][rdoc]

自身と整数 n の最大公約数を返します。

[EXCEPTION] ArgumentError:
n に整数以外のものを指定すると発生します。

例:

2.gcd(2)                    # => 2
3.gcd(7)                    # => 1
3.gcd(-7)                   # => 1
((1<<31)-1).gcd((1<<61)-1)  # => 1

また、self や n が 0 だった場合は、0 ではない方の整数の絶対値を返します。

3.gcd(0)                    # => 3
0.gcd(-7)                   # => 7

[SEE_ALSO] Integer#lcm, Integer#gcdlcm

gcdlcm(n) -> [Integer][permalink][rdoc]

自身と整数 n の最大公約数と最小公倍数の配列 [self.gcd(n), self.lcm(n)] を返します。

[EXCEPTION] ArgumentError:
n に整数以外のものを指定すると発生します。

例:

2.gcdlcm(2)                    # => [2, 2]
3.gcdlcm(-7)                   # => [1, 21]
((1<<31)-1).gcdlcm((1<<61)-1)  # => [1, 4951760154835678088235319297]

[SEE_ALSO] Integer#gcd, Integer#lcm

to_s -> String[permalink][rdoc]
to_s(base) -> String
inspect -> String
inspect(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 以外の数値を指定した場合に発生します。
integer? -> true[permalink][rdoc]

常に真を返します。

例:

1.integer?     # => true
1.0.integer?   # => false
lcm(n) -> Integer[permalink][rdoc]

自身と整数 n の最小公倍数を返します。

[EXCEPTION] ArgumentError:
n に整数以外のものを指定すると発生します。

例:

2.lcm(2)                    # => 2
3.lcm(-7)                   # => 21
((1<<31)-1).lcm((1<<61)-1)  # => 4951760154835678088235319297

また、self や n が 0 だった場合は、0 を返します。

3.lcm(0)                    # => 0
0.lcm(-7)                   # => 0

[SEE_ALSO] Integer#gcd, Integer#gcdlcm

next -> Integer[permalink][rdoc]
succ -> Integer

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

例:

1.next      #=> 2
(-1).next   #=> 0
1.succ      #=> 2
(-1).succ   #=> 0

[SEE_ALSO] Integer#pred

nobits? -> bool[permalink][rdoc]

self & mask のすべてのビットが 0 なら true を返します。

self & mask == 0 と等価です。

[PARAM] mask:
ビットマスクを整数で指定します。

42.nobits?(42)                   # => false
0b1010_1010.nobits?(0b1000_0010) # => false
0b1010_1010.nobits?(0b1000_0001) # => false
0b0100_0101.nobits?(0b1010_1010) # => true

[SEE_ALSO] Integer#allbits?

[SEE_ALSO] Integer#anybits?

numerator -> Integer[permalink][rdoc]

分子(常に自身)を返します。

[RETURN]
分子を返します。

例:

10.numerator    # => 10
-10.numerator   # => -10

[SEE_ALSO] Integer#denominator

odd? -> bool[permalink][rdoc]

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

例:

5.odd?     # => true
10.odd?    # => false
ord -> Integer[permalink][rdoc]

自身を返します。

10.ord    #=> 10
# String#ord
?a.ord    #=> 97

[SEE_ALSO] String#ord

pred -> Integer[permalink][rdoc]

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

1.pred      #=> 0
(-1).pred   #=> -2

[SEE_ALSO] Integer#next

rationalize -> Rational[permalink][rdoc]
rationalize(eps) -> Rational

自身を Rational に変換します。

[PARAM] eps:
許容する誤差

引数 eps は常に無視されます。

例:

2.rationalize      # => (2/1)
2.rationalize(100) # => (2/1)
2.rationalize(0.1) # => (2/1)
remainder(other) -> Numeric[permalink][rdoc]

self を other で割った余り r を返します。

r の符号は self と同じになります。

[PARAM] other:
self を割る数。

例:

5.remainder(3)    # => 2
-5.remainder(3)   # => -2
5.remainder(-3)   # => 2
-5.remainder(-3)  # => -2

-1234567890987654321.remainder(13731)      # => -6966
-1234567890987654321.remainder(13731.24)   # => -9906.22531493148

[SEE_ALSO] Integer#divmod, Integer#modulo, Numeric#modulo

round(ndigits = 0, half: :up) -> Integer[permalink][rdoc]

self ともっとも近い整数を返します。

[PARAM] ndigits:
10進数での小数点以下の有効桁数を整数で指定します。 負の整数を指定した場合、小数点位置から左に少なくとも n 個の 0 が並びます。
[PARAM] half:
ちょうど半分の値の丸め方を指定します。 サポートされている値は以下の通りです。

1.round         # => 1
1.round(2)      # => 1
15.round(-1)    # => 20
(-15).round(-1) #=> -20

25.round(-1, half: :up)      # => 30
25.round(-1, half: :down)    # => 20
25.round(-1, half: :even)    # => 20
35.round(-1, half: :up)      # => 40
35.round(-1, half: :down)    # => 30
35.round(-1, half: :even)    # => 40
(-25).round(-1, half: :up)   # => -30
(-25).round(-1, half: :down) # => -20
(-25).round(-1, half: :even) # => -20

[SEE_ALSO] Numeric#round

size -> Integer[permalink][rdoc]

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

例:

p 1.size
p 0x1_0000_0000.size
# => 4
     8
times {|n| ... } -> self[permalink][rdoc]
times -> 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[permalink][rdoc]

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

self が Float の範囲に収まらない場合、Float::INFINITY を返します。

例:

1.to_f                       # => 1.0
(Float::MAX.to_i * 2).to_f   # => Infinity
to_i -> self[permalink][rdoc]
to_int -> self

self を返します。

例:

10.to_i   # => 10
to_r -> Rational[permalink][rdoc]

自身を Rational に変換します。

例:

1.to_r        # => (1/1)
(1<<64).to_r  # => (18446744073709551616/1)
truncate(ndigits = 0) -> Integer[permalink][rdoc]

0 から self までの整数で、自身にもっとも近い整数を返します。

[PARAM] ndigits:
10進数での小数点以下の有効桁数を整数で指定します。 負の整数を指定した場合、小数点位置から左に少なくとも n 個の 0 が並びます。

1.truncate           # => 1
1.truncate(2)        # => 1
18.truncate(-1)      #=> 10
(-18).truncate(-1)   #=> -10

[SEE_ALSO] Numeric#truncate

upto(max) {|n| ... } -> Integer[permalink][rdoc]
upto(max) -> Enumerator

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

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

例:

5.upto(10) {|i| print i, " " } # => 5 6 7 8 9 10

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

self | other -> Integer[permalink][rdoc]

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

[PARAM] other:
数値

例:

1 | 1 # => 1
2 | 3 # => 3
~ self -> Integer[permalink][rdoc]

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

例:

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