ProfiPHPProfiPHP
Категория: Типы данных PHP

Целые числа (Integer)

Целые числа Integer - это числа без дробной части в диапазоне зависящему от разрядности системы.

Целые числа могут быть указаны в разных способах представления чисел.

Десятичная система

Десятичная система счисления является одной из самых распространенных систем счисления, которую мы повседневно используем. В каждом разряде (позиции) может использоваться только одна цифра из диапазона от 0 до 9. Основанием системы является число 10.

Двоичная система

Двоичная запись Integer доступна начиная с PHP 5.4.0.

Двоичная позиционная система счисления, в основном, используется в вычислительной технике с основанием 2 и записывается двумя символа (цифры): 0 и 1. В каждом разряде допустима только одна цифра — либо 0, либо 1.

Разберем, к примеру, число 10101, аналогичное числу 5 в десятичной системе счисления. Чтобы перевести из двоичной в десятичную систему необходимо умножить каждую цифру двоичного числа на основание "2", возведенное в степень, равную разряду. Таким образом, число:
10101 = 1*2(4) + 0*2(3) + 1*2(2) + 0*2(1) + 1*2(0) = 16 + 0 + 4 + 0 + 1 = 21
В PHP перевести двоичные данные в десятичные можно воспользовавшись функцией Bindec:
echo bindec( '10101' ); // 21
Обратный перевод из десятичной в двоичную систему можно осуществить функцией Decbin:
echo decbin( 21 ); // 10101
Восьмеричная система

Как и двоичная, восьмеричная система часто применяется в цифровой технике. Имеет основание 8 и использует для записи числа цифры от 0 до 7.

Для примера используем число 251. Для перевода в 10-ю систему необходимо каждый разряд исходного числа умножить на 8n, где n — это номер разряда. Получается, что:
251 = 2*8(2) + 5*8(1) + 1*8(0) = 128 + 40 + 1 = 169
Для перевода из десятичной в восьмеричную систему можно воспользоваться функцией Decoct:
echo decoct( 169 ); // 251
Шестнадцатеричная система

Шестнадцатеричная система широко используется в современных компьютерах. Ее можно увидеть, например, при указании цвета: #FFFFFF. Рассматриваемая система имеет основание 16 и использует для записи числа: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, где буквы равны 10, 11, 12, 13, 14, 15 соответственно.

Для примера возьмем число 40F. Для перевода в восьмеричную систему — сначала необходимо перевести шестнадцатеричное число в двоичное, а затем, разбив на группы по 3 разряда, в восьмеричное.

Чтобы преобразовать число в двоичную систему необходимо каждую цифру представить в виде 4-х разрядного двоичного числа.
40F = 100 0 1111
Но в 1 и 2 группах не достает разряда, поэтому заполним каждый ведущими нулями:
0100 0000 1111
Теперь необходимо разделить полученное число на группы по 3 цифры справа налево:
0100 0000 1111 = 010 000 001 111
Переведем каждую двоичную группу в восьмеричную систему, умножив каждый разряд на 2n, где n — номер разряда:
(0*2(2)+1*2(1)+0*2(0)) (0*2(2)+0*2(1)+0*2(0)) (0*2(2)+0*2(1)+1*2(0)) (1*2(2)+1*2(1)+1*2(0)) = 2017
Соответственно, 2017 в восьмеричной системе равно 1039 в десятичной.

Для перевода числа из десятичной системы счисления в шестнадцатеричную можно воспользоваться функцией Dechex:
echo dechex( 1039 ); // 40f
Для записи в восьмеричной системе счисления, необходимо поставить перед числом 0 (ноль). Для записи в шестнадцатеричной системе счисления, необходимо поставить перед числом 0x. Для записи в двоичной системе счисления, необходимо поставить перед числом 0b.
$a = 2017; // десятичное число
$a = -999; // отрицательное число
$a = 0251; // восьмеричное число (эквивалентно 169 в десятичной системе)
$a = 0x040F; // шестнадцатеричное число (эквивалентно 1039 в десятичной системе)
$a = 0b10111111; // двоичное число (эквивалентно 191 в десятичной системе)
Напомним, что двоичная запись Integer доступна начиная с PHP 5.4.0., поэтому в более ранних версиях будет отображено сообщение об ошибке:
Parse error: syntax error, unexpected T_STRING in file.php on line ... 
Размер Integer зависит от платформы, хотя, как правило, максимальное значение в диапазоне от -2 147 483 648 до 2 147 483 647 (это 32-битное знаковое). 64-битные платформы обычно имеют максимальное значение около 9E18, кроме Windows, которая всегда 32-битная. PHP не поддерживает беззнаковые целые. С версии PHP 5.0.5 размер Integer может быть определен с помощью константы PHP_INT_SIZE, а максимальное значение - с помощью константы PHP_INT_MAX. С версии PHP 7.0.0 так же введена константа PHP_INT_MIN, с помощью которой можно определить минимальное значение.

Если результат операции лежит за границами типа Integer, он будет преобразован в Float.
var_dump( 100000 ); // int(100000)
var_dump( 100000000000 ); // float(100000000000)
В PHP не существует оператора деления целых чисел. Результатом 1/2 будет Float 0.5. Если привести значение к Integer, оно будет округлено вниз, то есть будет отброшена дробная часть числа. Для большего контроля над округлением используйте функцию Round.
var_dump( 20/3 ); // float(6.6666666666667)
var_dump( (int)( 20/3 ) ); // int(6)
var_dump( round( 20/3 ) ); // float(7)
Для явного преобразования в Integer, используйте приведение Int или Integer. Однако, в большинстве случаев, в приведении типа нет необходимости, так как значение будет автоматически преобразовано, если оператор, функция или управляющая структура требует аргумент типа Integer. Значение также может быть преобразовано в Integer с помощью функции Intval.

Если Resource преобразуется в Integer, то результатом будет уникальный номер ресурса, привязанный к Resource во время исполнения PHP программы.

Манипуляции с типами:

Из булевого типа: FALSE преобразуется в 0 (ноль), а TRUE - в 1 (единицу).

Из чисел с плавающей точкой: число будет округлено в сторону нуля.

Из строк: если строка начинается с верного числового значения, будет использовано это значение. Иначе значением будет 0 (ноль).

Для других типов поведение преобразования в Integer не определено. Не полагайтесь на любое наблюдаемое поведение, так как оно может измениться без предупреждения.

Добавить комментарий

Имя:
Текст комментария: