php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #24381 Inconsistence behavior of var_dump
Submitted: 2003-06-28 18:51 UTC Modified: 2003-06-28 19:20 UTC
From: yipkeikwok at yahoo dot com Assigned:
Status: Not a bug Package: Math related
PHP Version: 4.3.2 OS: Windows 2000, Redhat Linux 9
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: yipkeikwok at yahoo dot com
New email:
PHP Version: OS:

 

 [2003-06-28 18:51 UTC] yipkeikwok at yahoo dot com
Description:
------------
The function var_dump() returns different data type for -2147483647 and -2147483647-1

--Yipkei Kwok

Reproduce code:
---------------
<?php
$int1 = -2147483648;
$int2 = -2147483647-1;
var_dump($int1);
var_dump($int2);
?>

Expected result:
----------------
float(-2147483648)
float(-2147483648)

The lower bound for data type integer is -2147483647. So, -2147483648 (-2147483647-1) should be regarded as float.

Actual result:
--------------
float(-2147483648)
int(-2147483648)

However, -2147483648 (-2147483647-1) is regarded as int.

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2003-06-28 19:05 UTC] pollita@php.net
Your "expected result" is based on an incorrect assumption.

The lower bound for type "integer" on a 32bit platform is in fact -2147483648.
 [2003-06-28 19:20 UTC] yipkeikwok at yahoo dot com
If the lower bound for the type "integer" is -2147483648, then, according to 

http://www.php.net/manual/en/language.types.integer.php

,var_dump() should have returned -2147483648 as int-typed instead of float-typed.

The actual result now is
float(-2147483648)

--Yipkei Kwok


Integer overflow

If you specify a number beyond the bounds of the integer type, it will be interpreted as a float instead. Also, if you perform an operation that results in a number beyond the bounds of the integer type, a float will be returned instead.
 [2003-06-28 21:51 UTC] marcot at tabini dot ca
It actually *is* expected (albeit possibly incorrect) behaviour on behalf of the engine:

http://bugs.php.net/bug.php?id=14134

Basically, what's happening is that 

$int1 = -2147483648;

is being interpreted as 

$int1 = 0 - 2147483648;

Since 2147483648 cannot be represented as an integer value, it (and, therefore, the result of the expression) is converted to double.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sun Dec 22 11:01:30 2024 UTC