PHP: Integer - целое число

В этой главе:

  • Синтаксис
  • Переполнение целых чисел
  • Преобразование в целое

Размер типа integer зависит от используемой платформы, хотя, как правило представлен обычно длиной 32 бита (это диапазон чисел от - 2 147 483 648 до 2 147 483 647). PHP не поддерживает беззнаковые целые.

Синтаксис

Целые числа могут быть указаны в десятичной (основание 10), шестнадцатеричной (основание 16), восьмеричной (основание 8) или двоичной (основание 2) системе счисления, с необязательным предшествующим знаком (- или +).

Для записи в восьмеричной системе счисления, необходимо поставить пред числом 0 (ноль). Для записи в шестнадцатеричной системе счисления, необходимо поставить перед числом 0x. Для записи в двоичной системе счисления, необходимо поставить перед числом 0b.

Пример:

1
2
3
4
5
6
7
8
<?php
 
  $a = 12345; // десятичное число
  $a = -1234; // отрицательное число
  $a = 0123;  // восьмеричное число (эквивалентно 83 в десятичной системе)
  $a = 0x1A;  // шестнадцатеричное число (эквивалентно 26 в десятичной системе)
 
?>

Размер типа integer можно узнать с помощью константы PHP_INT_SIZE (показывает размер в байтах, 1 байт = 8 бит), а его максимальное значение - с помощью константы PHP_INT_MAX:

1
2
3
4
5
6
<?php
 
  echo "PHP_INT_SIZE: ", PHP_INT_SIZE;
  echo "<br>PHP_INT_MAX: ",  PHP_INT_MAX;
 
?>

Переполнение целых чисел

Если PHP обнаружил, что число превышает размер типа integer, он будет интерпретировать его в качестве float. Аналогично, если результат арифметической операции лежит за границами типа integer, он будет преобразован в float:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
 
  // 32 битные числа
 
  $large_number = 2147483647;
  var_dump($large_number);                     // int(2147483647)
 
  $large_number = 2147483648;
  var_dump($large_number);                     // float(2147483648)
 
  $million = 1000000;
  $large_number =  50000 * $million;
  var_dump($large_number);                     // float(50000000000)
   
?>
 
<?php
 
  // 64 битные числа
 
  $large_number = 9223372036854775807;
  var_dump($large_number);                     // int(9223372036854775807)
 
  $large_number = 9223372036854775808;
  var_dump($large_number);                     // float(9.2233720368548E+18)
 
  $million = 1000000;
  $large_number =  50000000000000 * $million;
  var_dump($large_number);                     // float(5.0E+19)
   
?>

В PHP не существует оператора деления целых чисел. Результатом 1/2 будет float (0.5). Если привести значение к integer, оно будет округлено вниз. Для большего контроля над округлением чисел используется функция round():

1
2
3
4
5
6
7
<?php
 
  var_dump(25/7);         // float(3.5714285714286)
  var_dump((int) (25/7)); // int(3)
  var_dump(round(25/7));  // float(4)
   
?>

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

Для явного преобразования в целое (integer), используйте явное приведение (int) или (integer). Однако, в большинстве случаев, в приведении типа нет необходимости, так как значение будет автоматически преобразовано, если оператор, функция или управляющая структура требует аргумент типа integer. Значение также может быть преобразовано в integer с помощью функции intval():

1
2
3
4
5
6
7
8
<?php
 
  var_dump((int) 14.4);        // int(14)
  var_dump((int) (7/3));       // int(2)
  var_dump((integer) 6.9);     // int(6)
  var_dump((integer) (9/4));   // int(2)
 
?>