Spec-Zone.ru › Ruby 3.2

класс Integer

Родитель:
Numeric

Объект Integer представляет целое число.

Вы можете создать объект Integer явно с помощью:

  • литерала целого числа.

Вы можете преобразовать некоторые объекты в Integer с помощью:

  • Метода Integer.

Попытка добавить метод-синглетон к экземпляру этого класса вызывает исключение.

Что здесь

Сначала, что где-то еще. Класс Integer:

  • Наследуется от класса Numeric.

Здесь класс Integer предоставляет методы для:

  • Запроса

  • Сравнения

  • Преобразования

  • Другие

Запрос

  • allbits?: Возвращает, установлены ли все биты в self.

  • anybits?: Возвращает, установлены ли какие-либо биты в self.

  • nobits?: Возвращает, установлены ли какие-либо биты в self.

Сравнение

  • <: Возвращает, меньше ли self заданного значения.

  • <=: Возвращает, меньше или равно ли self заданному значению.

  • <=>: Возвращает число, указывающее, меньше ли, равно ли или больше ли self заданного значения.

  • == (алиас ===): Возвращает, равно ли self заданному значению.

    value.
  • >: Возвращает, больше ли self заданного значения.

  • >=: Возвращает, больше или равно ли self заданному значению.

Преобразование

  • ::sqrt: Возвращает целую квадратную корень заданного значения.

  • ::try_convert: Возвращает заданное значение, преобразованное в Integer.

  • % (алиас modulo): Возвращает остаток от деления self на заданное значение.

  • &: Возвращает побитовое И self и заданного значения.

  • *: Возвращает произведение self и заданного значения.

  • **: Возвращает значение self в степени заданного значения.

  • +: Возвращает сумму self и заданного значения.

  • -: Возвращает разность self и заданного значения.

  • /: Возвращает частное self и заданного значения.

  • <<: Возвращает значение self после сдвига влево.

  • >>: Возвращает значение self после сдвига вправо.

  • []: Возвращает срез битов из self.

  • ^: Возвращает побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ self и заданного значения.

  • ceil: Возвращает наименьшее число, большее или равное self.

  • chr: Возвращает строку из 1 символа, содержащую символ, представленный значением self.

  • digits: Возвращает массив целых чисел, представляющих цифры в системе счисления с основанием radix self.

  • div: Возвращает целую часть от деления self на заданное значение.

  • divmod: Возвращает массив из 2 элементов, содержащий результат частного и остатка от деления self на заданное значение.

  • fdiv: Возвращает результат Float деления self на заданное значение.

  • floor: Возвращает наибольшее число, меньшее или равное self.

  • pow: Возвращает результат возведения self в степень с модулем.

  • pred: Возвращает предшествующее целое число self.

  • remainder: Возвращает остаток от деления self на заданное значение.

  • round: Возвращает self, округлённое до ближайшего значения с заданной точностью.

  • succ (алиас next): Возвращает следующее целое число self.

  • to_f: Возвращает self, преобразованное в Float.

  • to_s (алиас inspect): Возвращает строку, содержащую представление self в заданной системе счисления.

  • truncate: Возвращает self, усечённое до заданной точности.

  • |: Возвращает побитовое ИЛИ self и заданного значения.

Другие

  • downto: Вызывает заданный блок с каждым целым значением от self до заданного значения.

  • times: Вызывает заданный блок self раз с каждым целым числом из (0..self-1).

  • upto: Вызывает заданный блок с каждым целым значением от self до заданного значения.

Константы

GMP_VERSION

Версия загруженного GMP.

Публичные методы класса

sqrt(numeric) → integer Показать исходный код
static VALUE
rb_int_s_isqrt(VALUE self, VALUE num)
{
    unsigned long n, sq;
    num = rb_to_int(num);
    if (FIXNUM_P(num)) {
        if (FIXNUM_NEGATIVE_P(num)) {
            domain_error("isqrt");
        }
        n = FIX2ULONG(num);
        sq = rb_ulong_isqrt(n);
        return LONG2FIX(sq);
    }
    else {
        size_t biglen;
        if (RBIGNUM_NEGATIVE_P(num)) {
            domain_error("isqrt");
        }
        biglen = BIGNUM_LEN(num);
        if (biglen == 0) return INT2FIX(0);
#if SIZEOF_BDIGIT <= SIZEOF_LONG
        /* short-circuit */
        if (biglen == 1) {
            n = BIGNUM_DIGITS(num)[0];
            sq = rb_ulong_isqrt(n);
            return ULONG2NUM(sq);
        }
#endif
        return rb_big_isqrt(num);
    }
}

Возвращает целую квадратную корень неотрицательного целого числа n, которое является наибольшим неотрицательным целым числом, меньшим или равным квадратного корня numeric.

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

Если numeric не является целым числом, оно преобразуется в целое число:

Integer.sqrt(Complex(4, 0))  # => 2
Integer.sqrt(Rational(4, 1)) # => 2
Integer.sqrt(4.0)            # => 2
Integer.sqrt(3.14159)        # => 1

Этот метод эквивалентен Math.sqrt(numeric).floor, за исключением того, что результат последнего кода может отличаться от истинного значения из-за ограниченной точности арифметики с плавающей точкой.

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

Вызывает исключение, если numeric отрицательное.

try_convert(object) → object, integer, or nil Показать исходный код
# File numeric.rb, line 320
def Integer.try_convert(num)
=begin
  Primitive.attr! 'inline'
  Primitive.cexpr! 'rb_check_integer_type(num)'
=end
end

Если object является объектом Integer, возвращает object.

Integer.try_convert(1) # => 1

В противном случае, если object отвечает на :to_int, вызывает object.to_int и возвращает результат.

Integer.try_convert(1.25) # => 1

Возвращает nil если object не отвечает на :to_int

Integer.try_convert([]) # => nil

Вызывает исключение, если object.to_int не возвращает объект Integer.

Методы Публичного Экземпляра

self % other → real_number Показать исходный код
VALUE
rb_int_modulo(VALUE x, VALUE y)
{
    if (FIXNUM_P(x)) {
        return fix_mod(x, y);
    }
    else if (RB_BIGNUM_TYPE_P(x)) {
        return rb_big_modulo(x, y);
    }
    return num_modulo(x, y);
}

Возвращает остаток от деления self на other в виде вещественного числа.

Для целых чисел n и вещественных чисел r, эти выражения эквивалентны:

n % r
n-r*(n/r).floor
n.divmod(r)[1]

См. Numeric#divmod.

Примеры:

10 % 2              # => 0
10 % 3              # => 1
10 % 4              # => 2

10 % -2             # => 0
10 % -3             # => -2
10 % -4             # => -2

10 % 3.0            # => 1.0
10 % Rational(3, 1) # => (1/1)

Integer#modulo — псевдоним для Integer#%.

Также известен как: modulo
self & other → integer Показать исходный код
VALUE
rb_int_and(VALUE x, VALUE y)
{
    if (FIXNUM_P(x)) {
        return fix_and(x, y);
    }
    else if (RB_BIGNUM_TYPE_P(x)) {
        return rb_big_and(x, y);
    }
    return Qnil;
}

Побитовое И; каждый бит в результате равен 1, если соответствующие биты в self и other равны 1, в противном случае 0:

"%04b" % (0b0101 & 0b0110) # => "0100"

Вызывает исключение, если other не является целым числом.

Связанные: Integer#| (побитовое ИЛИ), Integer#^ (побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ).

self * numeric → numeric_result Показать исходный код
VALUE
rb_int_mul(VALUE x, VALUE y)
{
    if (FIXNUM_P(x)) {
        return fix_mul(x, y);
    }
    else if (RB_BIGNUM_TYPE_P(x)) {
        return rb_big_mul(x, y);
    }
    return rb_num_coerce_bin(x, y, '*');
}

Выполняет умножение:

4 * 2              # => 8
4 * -2             # => -8
-4 * 2             # => -8
4 * 2.0            # => 8.0
4 * Rational(1, 3) # => (4/3)
4 * Complex(2, 0)  # => (8+0i)
self ** numeric → numeric_result Показать исходный код
VALUE
rb_int_pow(VALUE x, VALUE y)
{
    if (FIXNUM_P(x)) {
        return fix_pow(x, y);
    }
    else if (RB_BIGNUM_TYPE_P(x)) {
        return rb_big_pow(x, y);
    }
    return Qnil;
}

Возводит self в степень numeric:

2 ** 3              # => 8
2 ** -3             # => (1/8)
-2 ** 3             # => -8
-2 ** -3            # => (-1/8)
2 ** 3.3            # => 9.849155306759329
2 ** Rational(3, 1) # => (8/1)
2 ** Complex(3, 0)  # => (8+0i)
self + numeric → numeric_result Показать исходный код
VALUE
rb_int_plus(VALUE x, VALUE y)
{
    if (FIXNUM_P(x)) {
        return fix_plus(x, y);
    }
    else if (RB_BIGNUM_TYPE_P(x)) {
        return rb_big_plus(x, y);
    }
    return rb_num_coerce_bin(x, y, '+');
}

Выполняет сложение:

2 + 2              # => 4
-2 + 2             # => 0
-2 + -2            # => -4
2 + 2.0            # => 4.0
2 + Rational(2, 1) # => (4/1)
2 + Complex(2, 0)  # => (4+0i)
self - numeric → numeric_result Показать исходный код
VALUE
rb_int_minus(VALUE x, VALUE y)
{
    if (FIXNUM_P(x)) {
        return fix_minus(x, y);
    }
    else if (RB_BIGNUM_TYPE_P(x)) {
        return rb_big_minus(x, y);
    }
    return rb_num_coerce_bin(x, y, '-');
}

Выполняет вычитание:

4 - 2              # => 2
-4 - 2             # => -6
-4 - -2            # => -2
4 - 2.0            # => 2.0
4 - Rational(2, 1) # => (2/1)
4 - Complex(2, 0)  # => (2+0i)
-int → integer Показать исходный код
# File numeric.rb, line 88
def -@
  Primitive.attr! 'inline'
  Primitive.cexpr! 'rb_int_uminus(self)'
end

Возвращает int, с обратным знаком.

self / numeric → numeric_result Показать исходный код
VALUE
rb_int_div(VALUE x, VALUE y)
{
    if (FIXNUM_P(x)) {
        return fix_div(x, y);
    }
    else if (RB_BIGNUM_TYPE_P(x)) {
        return rb_big_div(x, y);
    }
    return Qnil;
}

Выполняет деление; для целых чисел numeric, результат усекается до целого числа:

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

For other +numeric+, returns non-integer result:

 4 / 3.0            # => 1.3333333333333333
 4 / Rational(3, 1) # => (4/3)
 4 / Complex(3, 0)  # => ((4/3)+0i)
self < other → true or false Показать исходный код
static VALUE
int_lt(VALUE x, VALUE y)
{
    if (FIXNUM_P(x)) {
        return fix_lt(x, y);
    }
    else if (RB_BIGNUM_TYPE_P(x)) {
        return rb_big_lt(x, y);
    }
    return Qnil;
}

Возвращает true, если значение self меньше, чем значение other:

  1 < 0              # => false
  1 < 1              # => false
  1 < 2              # => true
  1 < 0.5            # => false
  1 < Rational(1, 2) # => false

Raises an exception if the comparison cannot be made.
self << count → integer Показать исходный код
VALUE
rb_int_lshift(VALUE x, VALUE y)
{
    if (FIXNUM_P(x)) {
        return rb_fix_lshift(x, y);
    }
    else if (RB_BIGNUM_TYPE_P(x)) {
        return rb_big_lshift(x, y);
    }
    return Qnil;
}

Возвращает self с битами, сдвинутыми на count позиций влево, или вправо, если count отрицательно:

n = 0b11110000
"%08b" % (n << 1)  # => "111100000"
"%08b" % (n << 3)  # => "11110000000"
"%08b" % (n << -1) # => "01111000"
"%08b" % (n << -3) # => "00011110"

Связанные: Integer#>>.

self <= real → true or false Показать исходный код
static VALUE
int_le(VALUE x, VALUE y)
{
    if (FIXNUM_P(x)) {
        return fix_le(x, y);
    }
    else if (RB_BIGNUM_TYPE_P(x)) {
        return rb_big_le(x, y);
    }
    return Qnil;
}

Возвращает true если значение self меньше или равно значению other:

1 <= 0              # => false
1 <= 1              # => true
1 <= 2              # => true
1 <= 0.5            # => false
1 <= Rational(1, 2) # => false

Вызывает исключение, если сравнение невозможно.

self <=> other → -1, 0, +1, or nil Показать исходный код
VALUE
rb_int_cmp(VALUE x, VALUE y)
{
    if (FIXNUM_P(x)) {
        return fix_cmp(x, y);
    }
    else if (RB_BIGNUM_TYPE_P(x)) {
        return rb_big_cmp(x, y);
    }
    else {
        rb_raise(rb_eNotImpError, "need to define `<=>' in %s", rb_obj_classname(x));
    }
}

Возвращает:

  • -1, если self меньше other.

  • 0, если self равно other.

  • 1, если self больше other.

  • nil, если self и other несравнимы.

Примеры:

1 <=> 2              # => -1
1 <=> 1              # => 0
1 <=> 0              # => 1
1 <=> 'foo'          # => nil

1 <=> 1.0            # => 0
1 <=> Rational(1, 1) # => 0
1 <=> Complex(1, 0)  # => 0

Этот метод является основой для сравнений в модуле Comparable.

self == other → true or false

Возвращает true если self численно равно other; false в противном случае.

1 == 2     #=> false
1 == 1.0   #=> true

Связанные: Integer#eql? (требует, чтобы other было целым числом).

Integer#=== — псевдоним для Integer#==.

Псевдоним для: ===
=== == other -> true or false Показать исходный код
VALUE
rb_int_equal(VALUE x, VALUE y)
{
    if (FIXNUM_P(x)) {
        return fix_equal(x, y);
    }
    else if (RB_BIGNUM_TYPE_P(x)) {
        return rb_big_eq(x, y);
    }
    return Qnil;
}

Возвращает true если self численно равно other; false в противном случае.

1 == 2     #=> false
1 == 1.0   #=> true

Связанные: Integer#eql? (требует, чтобы other было целым числом).

Integer#=== — псевдоним для Integer#==.

Также известен как: ==
self > other → true or false Показать исходный код
VALUE
rb_int_gt(VALUE x, VALUE y)
{
    if (FIXNUM_P(x)) {
        return fix_gt(x, y);
    }
    else if (RB_BIGNUM_TYPE_P(x)) {
        return rb_big_gt(x, y);
    }
    return Qnil;
}

Возвращает true если значение self больше, чем значение other:

  1 > 0              # => true
  1 > 1              # => false
  1 > 2              # => false
  1 > 0.5            # => true
  1 > Rational(1, 2) # => true

Raises an exception if the comparison cannot be made.
self >= real → true or false Показать исходный код
VALUE
rb_int_ge(VALUE x, VALUE y)
{
    if (FIXNUM_P(x)) {
        return fix_ge(x, y);
    }
    else if (RB_BIGNUM_TYPE_P(x)) {
        return rb_big_ge(x, y);
    }
    return Qnil;
}

Возвращает true если значение self больше или равно значению other:

1 >= 0              # => true
1 >= 1              # => true
1 >= 2              # => false
1 >= 0.5            # => true
1 >= Rational(1, 2) # => true

Вызывает исключение, если сравнение невозможно.

self >> count → integer Показать исходный код
static VALUE
rb_int_rshift(VALUE x, VALUE y)
{
    if (FIXNUM_P(x)) {
        return rb_fix_rshift(x, y);
    }
    else if (RB_BIGNUM_TYPE_P(x)) {
        return rb_big_rshift(x, y);
    }
    return Qnil;
}

Возвращает self с битами, сдвинутыми на count позиций вправо, или влево, если count отрицательно:

n = 0b11110000
"%08b" % (n >> 1)  # => "01111000"
"%08b" % (n >> 3)  # => "00011110"
"%08b" % (n >> -1) # => "111100000"
"%08b" % (n >> -3) # => "11110000000"

Связанные: Integer#<<.

END_OF_DOCUMENT_MARKER
self[offset] → 0 или 1 Показать исходный код
self[offset, size] → целое число
self[range] → целое число
static VALUE
int_aref(int const argc, VALUE * const argv, VALUE const num)
{
    rb_check_arity(argc, 1, 2);
    if (argc == 2) {
        return int_aref2(num, argv[0], argv[1]);
    }
    return int_aref1(num, argv[0]);

    return Qnil;
}

Возвращает срез битов из self.

С аргументом offset, возвращает бит по заданному смещению, где смещение 0 относится к наименее значащему биту:

n = 0b10 # => 2
n[0]     # => 0
n[1]     # => 1
n[2]     # => 0
n[3]     # => 0

В принципе, n[i] эквивалентно (n >> i) & 1. Таким образом, отрицательный индекс всегда возвращает ноль:

255[-1] # => 0

С аргументами offset и size, возвращает size битов из self, начиная с offset и включая биты большей значимости:

n = 0b111000       # => 56
"%010b" % n[0, 10] # => "0000111000"
"%010b" % n[4, 10] # => "0000000011"

С аргументом range, возвращает range.size битов из self, начиная с range.begin и включая биты большей значимости:

n = 0b111000      # => 56
"%010b" % n[0..9] # => "0000111000"
"%010b" % n[4..9] # => "0000000011"

Вызывает исключение, если срез нельзя создать.

self ^ other → целое число Показать исходный код
static VALUE
int_xor(VALUE x, VALUE y)
{
    if (FIXNUM_P(x)) {
        return fix_xor(x, y);
    }
    else if (RB_BIGNUM_TYPE_P(x)) {
        return rb_big_xor(x, y);
    }
    return Qnil;
}

Битовое ИСКЛЮЧАЮЩЕЕ ИЛИ; каждый бит результата равен 1, если соответствующие биты в self и other отличаются, в противном случае 0:

"%04b" % (0b0101 ^ 0b0110) # => "0011"

Вызывает исключение, если other не является целым числом.

Связанные: Integer#& (побитовое И), Integer#| (побитовое ИЛИ).

abs → целое число Показать исходный код
# File numeric.rb, line 120
def abs
  Primitive.attr! 'inline'
  Primitive.cexpr! 'rb_int_abs(self)'
end

Возвращает абсолютное значение int.

(-12345).abs   #=> 12345
-12345.abs     #=> 12345
12345.abs      #=> 12345

Integer#magnitude — псевдоним для Integer#abs.

Также псевдоним: magnitude
allbits?(mask) → true или false Показать исходный код
static VALUE
int_allbits_p(VALUE num, VALUE mask)
{
    mask = rb_to_int(mask);
    return rb_int_equal(rb_int_and(num, mask), mask);
}

Возвращает true если все биты, установленные (=1) в mask также установлены в self; в противном случае возвращает false.

Примеры значений:

0b1010101  self
0b1010100  mask
0b1010100  self & mask
     true  self.allbits?(mask)

0b1010100  self
0b1010101  mask
0b1010100  self & mask
    false  self.allbits?(mask)

Связанные: Integer#anybits?, Integer#nobits?.

anybits?(mask) → true или false Показать исходный код
static VALUE
int_anybits_p(VALUE num, VALUE mask)
{
    mask = rb_to_int(mask);
    return RBOOL(!int_zero_p(rb_int_and(num, mask)));
}

Возвращает true если хотя бы один бит, установленный (=1) в mask также установлен в self; в противном случае возвращает false.

Примеры значений:

0b10000010  self
0b11111111  mask
0b10000010  self & mask
      true  self.anybits?(mask)

0b00000000  self
0b11111111  mask
0b00000000  self & mask
     false  self.anybits?(mask)

Связанные: Integer#allbits?, Integer#nobits?.

END_OF_DOCUMENT_MARKER
even? → true или false Показать исходный код
# File numeric.rb, line 175
def even?
  Primitive.attr! 'inline'
  Primitive.cexpr! 'rb_int_even_p(self)'
end

Возвращает true, если int — чётное число.

fdiv(numeric) → float Показать исходный код
VALUE
rb_int_fdiv(VALUE x, VALUE y)
{
    if (RB_INTEGER_TYPE_P(x)) {
        return DBL2NUM(rb_int_fdiv_double(x, y));
    }
    return Qnil;
}

Возвращает Float результат деления self на numeric:

4.fdiv(2)      # => 2.0
4.fdiv(-2)      # => -2.0
-4.fdiv(2)      # => -2.0
4.fdiv(2.0)      # => 2.0
4.fdiv(Rational(3, 4))      # => 5.333333333333333

Вызывает исключение, если numeric нельзя преобразовать в Float.

floor(ndigits = 0) → целое Показать исходный код
static VALUE
int_floor(int argc, VALUE* argv, VALUE num)
{
    int ndigits;

    if (!rb_check_arity(argc, 0, 1)) return num;
    ndigits = NUM2INT(argv[0]);
    if (ndigits >= 0) {
        return num;
    }
    return rb_int_floor(num, ndigits);
}

Возвращает наибольшее число, меньшее или равное self с точностью ndigits десятичных знаков.

Когда ndigits отрицательно, возвращаемое значение имеет по крайней мере ndigits.abs нулей в конце:

555.floor(-1)  # => 550
555.floor(-2)  # => 500
-555.floor(-2) # => -600
555.floor(-3)  # => 0

Возвращает self когда ndigits равно нулю или положительно.

555.floor     # => 555
555.floor(50) # => 555

Связанная функция: Integer#ceil.

gcd(other_int) → целое Показать исходный код
VALUE
rb_gcd(VALUE self, VALUE other)
{
    other = nurat_int_value(other);
    return f_gcd(self, other);
}

Возвращает наибольший общий делитель двух целых чисел. Результат всегда положительный. 0.gcd(x) и x.gcd(0) возвращают x.abs.

36.gcd(60)                  #=> 12
2.gcd(2)                    #=> 2
3.gcd(-7)                   #=> 1
((1<<31)-1).gcd((1<<61)-1)  #=> 1
gcdlcm(other_int) → массив Показать исходный код
VALUE
rb_gcdlcm(VALUE self, VALUE other)
{
    other = nurat_int_value(other);
    return rb_assoc_new(f_gcd(self, other), f_lcm(self, other));
}

Возвращает массив с наибольшим общим делителем и наименьшим общим кратным двух целых чисел, [gcd, lcm].

36.gcdlcm(60)                  #=> [12, 180]
2.gcdlcm(2)                    #=> [2, 2]
3.gcdlcm(-7)                   #=> [1, 21]
((1<<31)-1).gcdlcm((1<<61)-1)  #=> [1, 4951760154835678088235319297]
inspect(*args)

Возвращает строку, содержащую представление значения self в системе счисления base (от 2 до 36).

12345.to_s               # => "12345"
12345.to_s(2)            # => "11000000111001"
12345.to_s(8)            # => "30071"
12345.to_s(10)           # => "12345"
12345.to_s(16)           # => "3039"
12345.to_s(36)           # => "9ix"
78546939656932.to_s(36)  # => "rubyrules"

Вызывает исключение, если base выходит за пределы диапазона.

Integer#inspect — псевдоним для Integer#to_s.

Псевдоним для: to_s
integer? → true Показать исходный код
# File numeric.rb, line 184
def integer?
  true
end

Поскольку int уже является Integer, эта функция всегда возвращает true.

lcm(other_int) → целое Показать исходный код
VALUE
rb_lcm(VALUE self, VALUE other)
{
    other = nurat_int_value(other);
    return f_lcm(self, other);
}

Возвращает наименьшее общее кратное двух целых чисел. Результат всегда положительный. 0.lcm(x) и x.lcm(0) возвращают ноль.

36.lcm(60)                  #=> 180
2.lcm(2)                    #=> 2
3.lcm(-7)                   #=> 21
((1<<31)-1).lcm((1<<61)-1)  #=> 4951760154835678088235319297
magnitude → целое
Псевдоним для: abs
modulo(p1)

Возвращает self по модулю other как вещественное число.

Для целого числа n и вещественного числа r, эти выражения эквивалентны:

n % r
n-r*(n/r).floor
n.divmod(r)[1]

См. Numeric#divmod.

Примеры:

10 % 2              # => 0
10 % 3              # => 1
10 % 4              # => 2

10 % -2             # => 0
10 % -3             # => -2
10 % -4             # => -2

10 % 3.0            # => 1.0
10 % Rational(3, 1) # => (1/1)

Integer#modulo — псевдоним для Integer#%.

Псевдоним для: %
next()

Возвращает следующее целое число после self (эквивалентно self + 1):

1.succ  #=> 2
-1.succ #=> 0

Integer#next — псевдоним для Integer#succ.

Связанная функция: Integer#pred (предыдущее значение).

Псевдоним для: succ
nobits?(mask) → true или false Показать исходный код
static VALUE
int_nobits_p(VALUE num, VALUE mask)
{
    mask = rb_to_int(mask);
    return RBOOL(int_zero_p(rb_int_and(num, mask)));
}

Возвращает true, если ни один бит, установленный (=1) в mask, не установлен в self; в противном случае возвращает false.

Примеры значений:

0b11110000  self
0b00001111  mask
0b00000000  self & mask
      true  self.nobits?(mask)

0b00000001  self
0b11111111  mask
0b00000001  self & mask
     false  self.nobits?(mask)

Связанные функции: Integer#allbits?, Integer#anybits?.

numerator → self Показать исходный код
# File numeric.rb, line 290
def numerator
  self
end

Возвращает self.

odd? → true или false Показать исходный код
# File numeric.rb, line 200
def odd?
  Primitive.attr! 'inline'
  Primitive.cexpr! 'rb_int_odd_p(self)'
end

Возвращает true, если int — нечётное число.

ord → self Показать исходный код
# File numeric.rb, line 216
def ord
  self
end

Возвращает само значение.

97.ord   #=> 97

Этот метод предназначен для совместимости с символами в литералах в Ruby 1.9.

Например, ?a.ord возвращает 97 как в 1.8, так и в 1.9.

pow(numeric) → numeric Показать исходный код
pow(integer, integer) → integer
VALUE
rb_int_powm(int const argc, VALUE * const argv, VALUE const num)
{
    rb_check_arity(argc, 1, 2);

    if (argc == 1) {
        return rb_int_pow(num, argv[0]);
    }
    else {
        VALUE const a = num;
        VALUE const b = argv[0];
        VALUE m = argv[1];
        int nega_flg = 0;
        if ( ! RB_INTEGER_TYPE_P(b)) {
            rb_raise(rb_eTypeError, "Integer#pow() 2nd argument not allowed unless a 1st argument is integer");
        }
        if (rb_int_negative_p(b)) {
            rb_raise(rb_eRangeError, "Integer#pow() 1st argument cannot be negative when 2nd argument specified");
        }
        if (!RB_INTEGER_TYPE_P(m)) {
            rb_raise(rb_eTypeError, "Integer#pow() 2nd argument not allowed unless all arguments are integers");
        }

        if (rb_int_negative_p(m)) {
            m = rb_int_uminus(m);
            nega_flg = 1;
        }

        if (FIXNUM_P(m)) {
            long const half_val = (long)HALF_LONG_MSB;
            long const mm = FIX2LONG(m);
            if (!mm) rb_num_zerodiv();
            if (mm == 1) return INT2FIX(0);
            if (mm <= half_val) {
                return int_pow_tmp1(rb_int_modulo(a, m), b, mm, nega_flg);
            }
            else {
                return int_pow_tmp2(rb_int_modulo(a, m), b, mm, nega_flg);
            }
        }
        else {
            if (rb_bigzero_p(m)) rb_num_zerodiv();
            if (bignorm(m) == INT2FIX(1)) return INT2FIX(0);
            return int_pow_tmp3(rb_int_modulo(a, m), b, m, nega_flg);
        }
    }
    UNREACHABLE_RETURN(Qnil);
}

Возвращает результат (модулярного) возведения в степень:

a.pow(b)     #=> same as a**b
a.pow(b, m)  #=> same as (a**b) % m, but avoids huge temporary values
pred → предыдущее_целое Показать исходный код
static VALUE
rb_int_pred(VALUE num)
{
    if (FIXNUM_P(num)) {
        long i = FIX2LONG(num) - 1;
        return LONG2NUM(i);
    }
    if (RB_BIGNUM_TYPE_P(num)) {
        return rb_big_minus(num, INT2FIX(1));
    }
    return num_funcall1(num, '-', INT2FIX(1));
}

Возвращает предшествующее целое число для self (эквивалентно self - 1):

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

Связанная функция: Integer#succ (последующее значение).

rationalize([eps]) → рациональное Показать исходный код
static VALUE
integer_rationalize(int argc, VALUE *argv, VALUE self)
{
    rb_check_arity(argc, 0, 1);
    return integer_to_r(self);
}

Возвращает значение в виде рационального числа. Необязательный аргумент eps всегда игнорируется.

remainder(other) → вещественное_число Показать исходный код
static VALUE
int_remainder(VALUE x, VALUE y)
{
    if (FIXNUM_P(x)) {
        return num_remainder(x, y);
    }
    else if (RB_BIGNUM_TYPE_P(x)) {
        return rb_big_remainder(x, y);
    }
    return Qnil;
}

Возвращает остаток от деления self на other.

Примеры:

11.remainder(4)              # => 3
11.remainder(-4)             # => 3
-11.remainder(4)             # => -3
-11.remainder(-4)            # => -3

12.remainder(4)              # => 0
12.remainder(-4)             # => 0
-12.remainder(4)             # => 0
-12.remainder(-4)            # => 0

13.remainder(4.0)            # => 1.0
13.remainder(Rational(4, 1)) # => (1/1)
END_OF_DOCUMENT_MARKER
round(ndigits= 0, half: :up) → целое число Показать исходный код
static VALUE
int_round(int argc, VALUE* argv, VALUE num)
{
    int ndigits;
    int mode;
    VALUE nd, opt;

    if (!rb_scan_args(argc, argv, "01:", &nd, &opt)) return num;
    ndigits = NUM2INT(nd);
    mode = rb_num_get_rounding_option(opt);
    if (ndigits >= 0) {
        return num;
    }
    return rb_int_round(num, ndigits, mode);
}

Возвращает self, округлённое до ближайшего значения с точностью ndigits десятичных знаков.

При ndigits отрицательном возвращаемое значение имеет по крайней мере ndigits.abs нулей в конце:

555.round(-1)      # => 560
555.round(-2)      # => 600
555.round(-3)      # => 1000
-555.round(-2)     # => -600
555.round(-4)      # => 0

Возвращает self, когда ndigits равно нулю или положительному значению.

555.round     # => 555
555.round(1)  # => 555
555.round(50) # => 555

Если задан ключевой аргумент half, и self равноудалено от двух кандидатных значений, округление происходит в соответствии с заданным значением half:

  • :up или nil: округление от нуля:

    25.round(-1, half: :up)      # => 30
    (-25).round(-1, half: :up)   # => -30
    
  • :down: округление к нулю:

    25.round(-1, half: :down)    # => 20
    (-25).round(-1, half: :down) # => -20
    
  • :even: округление к кандидату, последняя ненулевая цифра которого чётная:

    25.round(-1, half: :even)    # => 20
    15.round(-1, half: :even)    # => 20
    (-25).round(-1, half: :even) # => -20
    

Вызывает исключение, если значение для half некорректно.

Связанно с: Integer#truncate.

size → int Показать исходный код
# File numeric.rb, line 235
def size
  Primitive.attr! 'inline'
  Primitive.cexpr! 'rb_int_size(self)'
end

Метод документации: Integer#size

Возвращает количество байтов в машинном представлении int (зависит от машины).

1.size               #=> 8
-1.size              #=> 8
2147483647.size      #=> 8
(256**10 - 1).size   #=> 10
(256**20 - 1).size   #=> 20
(256**40 - 1).size   #=> 40
succ → next_integer Показать исходный код
VALUE
rb_int_succ(VALUE num)
{
    if (FIXNUM_P(num)) {
        long i = FIX2LONG(num) + 1;
        return LONG2NUM(i);
    }
    if (RB_BIGNUM_TYPE_P(num)) {
        return rb_big_plus(num, INT2FIX(1));
    }
    return num_funcall1(num, '+', INT2FIX(1));
}

Возвращает целое число-преемник для self (эквивалентно self + 1):

1.succ  #=> 2
-1.succ #=> 0

Integer#next является псевдонимом для Integer#succ.

Связанно с: Integer#pred (предыдущее значение).

Также известен как: next
times {|i| ... } → self Показать исходный код
times → enumerator
static VALUE
int_dotimes(VALUE num)
{
    RETURN_SIZED_ENUMERATOR(num, 0, 0, int_dotimes_size);

    if (FIXNUM_P(num)) {
        long i, end;

        end = FIX2LONG(num);
        for (i=0; i<end; i++) {
            rb_yield_1(LONG2FIX(i));
        }
    }
    else {
        VALUE i = INT2FIX(0);

        for (;;) {
            if (!RTEST(int_le(i, num))) break;
            rb_yield(i);
            i = rb_int_plus(i, INT2FIX(1));
        }
    }
    return num;
}

Вызывает заданный блок self раз с каждым целым числом в (0..self-1):

a = []
5.times {|i| a.push(i) } # => 5
a                        # => [0, 1, 2, 3, 4]

Без блока возвращает Enumerator.

to_bn() Показать исходный код
# File ext/openssl/lib/openssl/bn.rb, line 37
def to_bn
  OpenSSL::BN::new(self)
end

Преобразует Integer в OpenSSL::BN

См. ‘man bn` для дополнительной информации.

Ruby Core © 1993–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

END_OF_DOCUMENT_MARKER

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API