2012-06-14 3 views
1

Я прочитал инструкцию по PHP домашней страницыHexadecimal Целочисленного переполнения

Он пишет:

// this doesn't go for 
//hexadecimal specified integers above 2^32-1: 

var_dump(0x100000000); 

// output: int(2147483647) 

Но он имеет 4,5 байт, который больше, чем Int (4 байта), и я проверить его.

Он выдает поплавок.

Я не понимаю, почему они противоречат?

+2

Что говорит 'echo PHP_INT_MAX''? – hakre

+0

Я тестирую класс, который 32, а мой рабочий стол - 64, и он выводит 9223372036854775807 –

+1

Вы еще не достигли предела. Граница 2^32 типична для 32-битных систем, но фактическое значение может меняться. – hakre

ответ

3

От the PHP manual page on integers: «. Если PHP встречает число, превышающее пределы целого типа, оно будет интерпретировано как поплавок вместо Также , операция, которая приводит к тому, что число выходит за пределы целочисленного типа, вместо этого вернет float ».

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

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

0

Он выводит поплавок для меня: float(4294967296)

DEMO: http://codepad.org/otsGOiWf

+1

ли это страница manul неправильно? –

+0

http://php.net/manual/de/language.types.integer.php –

+0

и что такое «это не означает шестнадцатеричные указанные целые числа выше 2^32-1:« означает? –

Смежные вопросы