Php int long int

Using long int in PHP

The size of an integer is platform-dependent, although a maximum value of about two billion is the usual value (that’s 32 bits signed). 64-bit platforms usually have a maximum value of about 9E18. PHP does not support unsigned integers. Integer size can be determined using the constant PHP_INT_SIZE, and maximum value using the constant PHP_INT_MAX since PHP 4.4.0 and PHP 5.0.5.

.

If PHP encounters a number beyond the bounds of the integer type, it will be interpreted as a float instead. Also, an operation which results in a number beyond the bounds of the integer type will return a float instead.

BC Math and GMP are the (only?) way to manipulate this limitation.

Читайте также:  Creating classes at runtime java

Solution 3

If you need to work with very large numbers I have found success with BC Math. Here is a link to everything you need to know:

Solution 4

If you want to generate the number and manipulate as a native type, you can’t with most PHP installations (either you have 32 or 64 bit int s and nothing else), as the other answers have already stated. However, if you are just generating a number and want to pass it around a possible trick is to just concatenate strings:

$var = rand(0,PHP_INT_MAX).str_pad(rand(0, 999999999), 9, 0, STR_PAD_LEFT); echo $var; 

On a platform in which PHP uses a 32 bit integer, this allows you to get a near random integer (as a string) that is bigger than 32 bits ( > 10 decimal places). Of course, there is a bias in this construction which means you won’t cover all the numbers with the same probability. The limits of the rand() calls obey normal decimal rules so its simple to adjust the upper bound of the number you want.

If all you’re doing is storing/transmitting/showing this value, the string will be just fine. Equality and greater/less than tests will also work. Just don’t do any math with it.

Источник

Использование long int в PHP

Размер целого зависит от платформы, хотя максимальное значение около двух миллиардов – это обычное значение (это 32 бита). Обычно 64-битные платформы имеют максимальное значение около 9E18. PHP не поддерживает целые числа без знака. Целочисленный размер может быть определен с использованием константы PHP_INT_SIZE и максимального значения с использованием константы PHP_INT_MAX с PHP 4.4.0 и PHP 5.0.5.

Если PHP встречает число за пределами целочисленного типа, оно будет интерпретироваться как float. Кроме того, операция, которая приводит к числу за пределами целочисленного типа, вместо этого возвращает float.

BC Math и GMP – это (только?) Способ манипулировать этим ограничением.

Если вам нужно работать с очень большими числами, я нашел успех в BC Math. Вот ссылка на все, что вам нужно знать:

Если вы хотите сгенерировать номер и манипулировать как родной тип, вы не можете с большинством установок PHP (или у вас есть 32 или 64 бит int s и ничего больше), как уже указывали другие ответы. Однако, если вы просто генерируете число и хотите передать его вокруг возможного трюка, нужно просто конкатенировать строки:

$var = rand(0,PHP_INT_MAX).str_pad(rand(0, 999999999), 9, 0, STR_PAD_LEFT); echo $var; 

На платформе, в которой PHP использует 32-битное целое число, это позволяет получить почти случайное целое число (в виде строки), которое превышает 32 бита (> 10 знаков после запятой). Конечно, в этой конструкции есть предвзятость, что означает, что вы не будете покрывать все числа с той же вероятностью. Пределы вызовов rand() подчиняются нормальным десятичным правилам, поэтому их просто настроить верхнюю границу нужного числа.

Если все, что вы делаете, это сохранение / передача / показ этого значения, строка будет в порядке. Равенство и большее / меньшее, чем тесты, также будут работать. Просто не делайте математики с этим.

Источник

Целые числа

Целые числа могут быть указаны в десятичной (основание 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 в десятичной системе)
?>

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

десятичные : 48* | 0 шестнадцатеричные : 0[xX][0-9a-fA-F]+ восьмеричные : 06+ двоичные : 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)
?>

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

Для явного преобразования в 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 , так как это иногда может дать неожиданные результаты.

Источник

I’m a coder. Welcome to my blog. Here are some of the records on my job.

Home

Categories

Using long int in PHP

I am trying this out, but am unable to store large value

$var = rand(100000000000000,999999999999999); echo $var; // prints a 9 digit value(largest possible) 

How to get a desired value ?

PHP ints are typically 32 bits. Other packages provide higher-precision ints: http://php.net/manual/en/language.types.integer.php

Under what circumstances can we use long int in C

In my machine, i get the following results: sizeof(long) = 8 sizeof(long int) = 8 Where to use long int and why not just use int?As indicated in your comments, the example you provided isn’t relevant to the question you asked. If your question was me

Using long int as a parameter for malloc

c bit fields strange behavior with long int in struct

i am observing strange behaviour when i run the following code. i create a bitfield by using a struct, where i want to use 52 bits, so i use long int. The size of long int is 64 bits on my system, i check it inside the code. Somehow when i try to set

Long int to string conversion to PHP

I’m using FMS along with PHP and I need the client’s ID in order to disconnect some user at some point. So, I retrieve client’s ID from FMS, but FMS sends the ID as a long int, such as 4702111234508538223. Here’s my problem; I need to convert this nu

Is there a difference between running an int.Parse () long and using long.Parse?

I’ve just stumbled on some code where the developer used fooBar((long)int.Parse(someVariable)); The fooBar function is just waiting a long as a parameter and use it for an SQL query. Is there any difference between that and using long.Parse(. )?Yes,

Conversion to long long int in C using strtoull ()

What im trying to do is take in an input txt file filled with thousands of lines of hexcimals values and convert them to long long ints. Example: 0x7f1a91026b00 0x7f1a91026b03 0x7f1a91027130 0x7f1a91027131 0x7f1a91027134 0x7f1a91027136 0x7f1a91027138

Why can not I use & ldquo; long long int & rdquo; with & ldquo; int & rdquo; in my code C?

Why can’t I use «long long int» with «int» in my C code? int main(void) < long long int a; int b; a = 1000000000; b = 3200; printf("long long int a = %d\n int b = %d", a, b); return 0; >long long int a = 1000000000 int b = 0

The overflow appears even when using long unsigned int

When I make the following calculation: unsigned long long int data_size = 60123456 * 128 * sizeof(double); printf(«data_size= %llu \n», data_size); I surprisingly get overflow warning: test.c:20:49: warning: overflow in expression; result is -89

Converting two integers to a long one in PHP

I’ve got two integers and I need to convert them into a long. I’m totally lost on how to do this. The two integers that I need to convert are: INT 1: 60850985 INT 2: 59150141 I need a method that converts two integers into a long. If you can post one

Python: Is there a way to keep an automatic conversion from int to long int to occur?

Python is more strongly typed than other scripting languages. For example, in Perl: perl -E ‘$c=5; $d=»6″; say $c+$d’ #prints 11 But in Python: >>> c=»6″ >>> d=5 >>> print c+d Traceback (most recent call last

Should the use of int-type bit-fields be discouraged?

From the Draft C++ Standard (N3337): 9.6 Bit-fields 4 If the value true or false is stored into a bit-field of type bool of any size (including a one bit bit-field), the original bool value and the value of the bit-field shall compare equal. If the v

C ++ read char from file, convert long long int

This is my function at the moment long long int File::Getline3(int user1, long long int user3) < std::string filename = std::to_string(user1); std::ifstream fin(filename + ".txt"); fin.getline (line1, 5); fin.getline (line2, 5); fin.getline (lin

Long int or double python

How can I convert m and n to long int or double in Python 3.4? Currently for large integers (ex:65535), the output is ‘None’? m = eval(input(«Enter value for m: «)) n = eval(input(«Enter value for n: «)) input() returns a string, which

Why does implicit conversion from int to long long int give an unexpected response in C ++?

I read that conversion from int to long long int is promotion and hence thought that there shouldn’t be any issue as there is no loss of data, unlike the vice versa conversion. But when I multiply two ints of large value and store it in long long int

Источник

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