Php отрицательное целое число

Целые числа

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

Если вы используете 8-ричную нотацию, первым символом числа должен быть 0 (нуль), для 16-ричной нотации первыми символами числа будут 0x.

Пример 6-1. Целочисленные литералы

$a = 1234; # 10-ричное число $a = -123; # отрицательное число $a = 0123; # 8-ричное число (экивалентно 10-ричному 83) $a = 0x1A; # hexadecimal number (экивалентно 10-ричному 26)

Размер integer зависит от платформы, хотя максимальное значение около 2 миллионов является обычным (то есть 32-битное знаковое). PHP не поддерживает беззнаковые integers.

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

Если вы специфицируете число за рамками диапазона типа integer, оно будет интерпретировано как float. Также, если вы выполняете операцию, которая даёт в результате число за пределами диапазона типа integer, будет возвращено float.

$large_number = 2147483647; var_dump($large_number); // на выходе: int(2147483647) $large_number = 2147483648; var_dump($large_number); // на выходе: float(2147483648) // это подходит также для специфицированных 16-ричных чисел: var_dump( 0x80000000 ); // на выходе: float(2147483648) $million = 1000000; $large_number = 50000 * $million; var_dump($large_number); // на выходе: float(50000000000)
Предупреждение!

К сожалению, в РНР был замечен bug, поэтому не всегда была корректная работа с отрицательными числами. Например: если выполнить -50000 * $million, результат будет
-429496728. Однако, когда оба операнда — положительные, проблем не возникает.

В PHP нет операции целочисленного деления. 1/2 даст float 0.5.

var_dump( 25/7 ); // на выходе: float(3.5714285714286)

Конвертация в integer

Для явной конвертации значения в integer используйте приведение (int) или (integer). Однако в большинстве случаев вам нет необходимости использовать приведение/cast, поскольку значение будет конвертировано автоматически, если операция, функция или структура управления требует integer-аргумента.

Из boolean

FALSE даст 0 (нуль), а TRUE даст 1 (единицу).

Из чисел с плавающей точкой

При конвертации float в integer, число округляется в сторону нуля.

Если float выходит за диапазон integer (обычно это +/- 2.15e+9 = 2^31), результат будет неопределённым, поскольку float не имеет достаточной точности для выдачи точного integer-результата. В этом случае не будет выдано ни предупреждения, ни даже какого-либо уведомления!

Предупреждение! Никогда не приводите неизвестную дробь к integer, так как это может дать непредсказуемый результат.

echo (int) ( (0.1+0.7) * 10 ); // выведет 7!

Из string

Из других типов

Предупреждение! Поведение при конвертации в integer для других типов не определено. В настоящее время поведение такое же, как если бы значение сначала было конвертировано в boolean. Однако не полагайтесь на это поведение, так как оно может быть изменено без предупреждения.

Читайте также:  Layout web page using css

Источник

Целые числа

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

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

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

Пример #1 Целые числа

$a = 1234 ; // десятичное число
$a = — 123 ; // отрицательное число
$a = 0123 ; // восьмеричное число (эквивалентно 83 в десятичной системе)
$a = 0x1A ; // шестнадцатеричное число (эквивалентно 26 в десятичной системе)
$a = 0b11111111 ; // двоичное число (эквивалентно 255 в десятичной системе)
?>

Формально, структуру целых чисел можно записать так:

десятичные : 59* | 0 шестнадцатеричные : 0[xX][0-9a-fA-F]+ восьмеричные : 07+ двоичные : 0b[01]+ целые : [+-]?десятичные | [+-]?шестнадцатеричные | [+-]?восьмеричные | [+-]?двоичные

Размер integer зависит от платформы, хотя, как правило, максимальное значение примерно равно 2 миллиардам (это 32-битное знаковое). 64-битные платформы обычно имеют максимальное значение около 9E18, кроме Windows, которая всегда 32-битная. PHP не поддерживает беззнаковые целые ( integer ). С версии PHP 4.4.0 и PHP 5.0.5 размер integer может быть определен с помощью константы PHP_INT_SIZE , а его максимальное значение — с помощью константы PHP_INT_MAX .

Если в восьмеричном integer будет обнаружена неверная цифра (например, 8 или 9), оставшаяся часть числа будет проигнорирована.

Пример #2 Странности с восьмеричными числами

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

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

Пример #3 Переполнение целых на 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)
?>

Пример #4 Переполнение целых на 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() .

var_dump ( 25 / 7 ); // float(3.5714285714286)
var_dump ((int) ( 25 / 7 )); // int(3)
var_dump ( round ( 25 / 7 )); // float(4)
?>

Читайте также:  Python изменение формата даты

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

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

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

Из булевого типа

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

Из чисел с плавающей точкой

При преобразовании из float в integer , число будет округлено в сторону нуля.

Если число с плавающей точкой превышает размеры integer (обычно +/- 2.15e+9 = 2^31 на 32-битных системах и +/- 9.22e+18 = 2^63 на 64-битных системах, кроме Windows), результат будет неопределенным, так как float не имеет достаточной точности, чтобы вернуть верный результат. В этом случае не будет выведено ни предупреждения, ни даже замечания!

Никогда не приводите неизвестную дробь к integer , так как это иногда может дать неожиданные результаты.

Источник

Php отрицательное целое число

int — это число из множества ℤ = <. -2, -1, 0, 1, 2, . >.

Синтаксис

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

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

Начиная с PHP 7.4.0, целочисленные литералы могут содержать подчеркивания ( _ ) между цифрами для лучшей читаемости литералов. Эти подчеркивания удаляются сканером PHP.

Пример #1 Целые числа

$a = 1234 ; // десятичное число
$a = 0123 ; // восьмеричное число (эквивалентно 83 в десятичной системе)
$a = 0x1A ; // шестнадцатеричное число (эквивалентно 26 в десятичной системе)
$a = 0b11111111 ; // двоичное число (эквивалентно 255 в десятичной системе)
$a = 1_234_567 ; // десятичное число (с PHP 7.4.0)
?>

Формально структура целых чисел ( int ) соответствует PHP 7.4.0 (ранее подчеркивания не допускались):

десятичные : 45*(_3+)* | 0 шестнадцатеричные : 0[xX][0-9a-fA-F]+(_[0-9a-fA-F]+)* восьмеричные : 05+(_7+)* двоичные : 0[bB][01]+(_[01]+)* целые : десятичные | шестнадцатеричные | восьмеричные | двоичные

Размер типа int зависит от платформы, хотя, как правило, максимальное значение примерно равно 2 миллиардам (это 32-битное знаковое). 64-битные платформы обычно имеют максимальное значение около 9E18. PHP не поддерживает беззнаковые целые числа ( int ). Размер int может быть определен с помощью константы PHP_INT_SIZE , максимальное значение — с помощью константы PHP_INT_MAX , а с помощью константы PHP_INT_MIN можно определить минимальное значение.

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

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

Читайте также:  Add margins in css

Пример #2 Переполнение целых на 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)
?>

Пример #3 Переполнение целых на 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 нет оператора деления целых чисел ( int ), для этого используйте функцию intdiv() >. Результатом 1/2 будет float 0.5 . Если привести значение к int , оно будет округлено вниз, то есть будет отброшена дробная часть числа. Для большего контроля над округлением используйте функцию round() .

var_dump ( 25 / 7 ); // float(3.5714285714286)
var_dump ((int) ( 25 / 7 )); // int(3)
var_dump ( round ( 25 / 7 )); // float(4)
?>

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

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

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

Из булевого типа

false преобразуется в 0 (ноль), а true — в 1 (единицу).

Из чисел с плавающей точкой

При преобразовании из float в int , число будет округлено в сторону нуля.

Если число с плавающей точкой превышает размеры int (обычно +/- 2.15e+9 = 2^31 на 32-битных системах и +/- 9.22e+18 = 2^63 на 64-битных системах, результат будет неопределенным, так как float не имеет достаточной точности, чтобы вернуть верный результат в виде целого числа ( int ). В этом случае не будет выведено ни предупреждения, ни даже замечания!

Замечание:

Значения NaN и Infinity при приведении к int становятся равными нулю, вместо неопределенного значения в зависимости от платформы.

Никогда не приводите неизвестную дробь к int , так как это иногда может дать неожиданные результаты.

Из строк

Если строка содержит числа или ведущая числовая, тогда она будет преобразована в соответствующее целочисленное значение, в противном случае она преобразуется в ноль ( 0 ).

Из NULL

Значение null всегда преобразуется в ноль ( 0 ).

Из других типов

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

Источник

Оцените статью