Главная » Статьи » Ruby » Более подробно о типах данных |
Целые числа
Изначально числа представлены трёмя типами: два целых типа (классы Fixnum и Bignum) и один с плавающей запятой (класс Float). Возможно подключение дополнительных типов, например, комплексных и рациональных чисел, но пока ограничимся тремя.
Целые числа Целые числа в Ruby не ограничены по величине, то есть могут хранить на сколько угодно большие значения. Для обеспечения такого волшебного свойства было создано два класса. Один из них хранит числа меньшие 2^31 (по модулю), а второй — всё, что больше. По сути, для больших чисел создаётся массив из маленьких, а раз массив не имеет ограничений по длине, то и число получается неограниченным по значению. А вот и неправда. Если, например, написать puts 54308428790203478762340052723346983453487023489987231275412390872348475 **54308428790203478762340052723346983453487023489987231275412390872348475 то он начинает ругаться и выдаёт Infinity. Как ни странно, 2^30 определяется как Bignum (2**30).class => Bignum Однако, целое число, меньшее (по модулю)2^30 определяется как Fixnum ((2**30)-1).class => Fixnum (-(2**30)+1).class => Fixnum Так-то! Как только число типа Fixnum становится больше 2^31 (по модулю), то оно преобразуется к классу Bignum. Если число типа Bignum становится меньше 2^31, то оно преобразуется к типу Fixnum. При записи целых чисел сначала указывается знак числа (знак + обычно не пишется). Далее идёт основание системы счисления, в которой задаётся число (если оно отлично от десятичной): 0 — для восьмеричной, 0x — для шестнадцатеричной, 0b — для двоичной. Затем идёт последовательность цифр, выражающих число в данной системе счисления. При записи чисел можно использовать символ подчёркивания, который игнорируется при обработке. Чтобы закрепить вышесказанное, посмотрим примеры целых чисел: # тип Fixnum 123_456 # подчёркивание игнорируется -567 # отрицательное число 0xbad # шестнадцатеричное число 0377 # восьмеричное -0b101010 # отрицательное двоичное 0b0101_0101 # подчёркивание игнорируется # тип Bignum 123_456_789_123_456 # подчёркивание игнорируется -123_456_789_123_456 # отрицательное 07777777777777777777 # восьмеричное большое Как видно из примеров, маленькие целые (Fixnum) и больши́е целые (Bignum) отличаются только значением. | |
Просмотров: 1490 | | |
Всего комментариев: 0 | |