Небольшой вопрос по типу const

Striker

Новичок
Небольшой вопрос по типу const

Вот такой вот простой скриптик:

PHP:
<?php
class A
{
	const VERSION_1 = 0x80010000;
}
var_dump(A::VERSION_1);
?>
На выходе получаем float(2147549184) :confused:

Вопрос -- почему константа стала float? Может это зависеть от настроек PHP?

PHP Version 5.2.5
Apache/2.2.6
FreeBSD 7.0
 

berkut

Новичок
слишком число здоровое, в инт не лезит

-~{}~ 22.11.07 21:02:

пхп мануал - languge reference -> types -> Integers
 

Alexandre

PHPПенсионер
слишком число здоровое, в инт не лезит
1)пхп использует лонг,
2) число 0x80010000 ровно 4 байта, что соответствует int (зависит от реализации Ось)
у меня int(2147549184)
php 5.2.3 ось FreeBSD 6.2-RELEASE (SMP)

-~{}~ 22.11.07 22:21:

Может это зависеть от настроек PHP?
думаю (но не факт), зависит от настроек компилятора, которым был скомпилирован рнр
 

SiMM

Новичок
> число 0x80010000 ровно 4 байта, что соответствует int
[m]language.types.integer[/m]
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). PHP does not support unsigned integers. Integer size can be determined from PHP_INT_SIZE, maximum value from PHP_INT_MAX since PHP 4.4.0 and PHP 5.0.5.

> у меня int(2147549184)
В 64хразрядной OS - и не удивительно.
 

Nelius

кипарис во дворе
int(2147549184)
PHP 5.2.1
Gentoo AMD 64 bit
(хотя да, вполне логично =) )

float 2147549184
PHP 5.2.4
WinXP SP2 32 bit

-~{}~ 23.11.07 00:24:

Превышение размера целого

Если вы определите число, превышающее пределы целого типа, оно будет интерпретировано как число с плавающей точкой. Также, если вы используете оператор, результатом работы которого будет число, превышающее пределы целого, вместо него будет возвращено число с плавающей точкой.

PHP:
<?php
$large_number =  2147483647;
var_dump($large_number);
// вывод: int(2147483647)

$large_number =  2147483648;
var_dump($large_number);
// вывод: float(2147483648)

// это справедливо и для шестнадцатеричных целых:
var_dump( 0x80000000 );
// вывод: float(2147483648)

$million = 1000000;
$large_number =  50000 * $million;
var_dump($large_number);
// вывод: float(50000000000)
?>
-~{}~ 23.11.07 00:30:

Из комментариев в мане:
Keep in mind, PHP integer operators are INTEGER -- not long.
 
Сверху