PHP-типы. Целые числа

Целые числа могут быть указаны в десятичной, шестнадцатеричной, восьмеричной и двоичной системах счисления, с необязательным предшествующим знаком (-/+).
Двоичная запись доступна начиная с версии 5.4
Восьмеричная запись: Перед числом ставится “0”
Шестнадцатеричная запись: Перед числом ставится “0х”
Двоичная запись: Перед числом ставится “0b”
<?php
$a = 1234; // десятичное число
$a = -123; // отрицательное число
$a = 0123; // восьмеричное число (эквивалентно 83 в десятичной системе)
$a = 0x1A; // шестнадцатеричное число (эквивалентно 26 в десятичной системе)
$a = 0b10; // двоичное число (эквивалентно 2)
?>

Структура целых чисел:
десятичные        : [1-9][0-9]*   | 0
шестнадцатеричные : 0[xX][0-9a-fA-F]+
восьмеричные      : 0[0-7]+
двоичные          : 0b[01]+
целые       : [+-]?десятичные
| [+-]?шестнадцатеричные
| [+-]?восьмеричные
| [+-]?двоичные
Размер integer зависит от платформы, для 32-битной — это 2147483647, для 64-битной это 0x7fffffffffffffff (9 223 372 036 854 775 807)- . Не поддерживет беззнаковые целые.
Константа PHP_INT_MAX — хранит максимальное значение int.
Константа PHP_INT_SIZE — хранит размер числа в байтах. 4 байта — это 32 битное число, 8 байт — 64-битное число.

Странность при работе с 8-ричными числами:

Если в воcьмеричном integer будет обнаружена неверная цифра (8,9) — то оставшаяся часть будет проигнорирована:
<?php
var_dump(01090); // 010 octal = 8 decimal
?>

Переполнение:

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

<?php
$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 не существует оператора деления целых чисел. Если числа на цело не делятся то всегда будет float тип результата. Если приветсти результат к integer то дробная часть будет отброшена. Лучше использовать функцию round() — округление чисел.
<?php
var_dump(25/7);         // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7));  // float(4)
?>
Преобразование в целое:
(int), (integer) — приведение типа

intval() — функция преобразования

Если оператор, функция или управляющая структура требует аргумет типа integer, то значение будет преобразовано к integer автоматически.
FALSE преобразуется в 0
TRUE преобразуется в 1

Если число с плавающей точкой превышает размер integer, то результат будет непределенным. Никаких предупреждение выведено не будет
<?php
echo (int) ( (0.1+0.7) * 10 ); // выводит 7!
?>

0.1+0.7 = 0.7999999 — внутренее представление результата
(int)7,9 — 7
Пример подсчета количества цифр в числе:
<?php

function count_digit($number)
{
    $digit = 0;
    do
    {
       $number /= 10;      //$number = $number / 10;
       $number = intval($number);
       $digit++;
    }while($number!=0);
    return $digit;
}
 
//function call
$num = 12312;
$number_of_digits = count_digit($num); //this is call :)
echo $number_of_digits;
//выведет 5
?>

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>