Bug #12435 Updated: Incorrect results from logical AND
| From: | derick@php.net | Date: | Sun, 07 Jul 2002 18:12:53 +0000 |
| Subject: | Bug #12435 Updated: Incorrect results from logical AND | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-13417@lists.php.net to get a copy of this message | ||
ID: 12435
Updated by: derick@php.net
Reported By: lovan@lifesci.ucsb.edu
Status: Open
-Bug Type: Math related
+Bug Type: Scripting Engine problem
Operating System: Solaris 2.8
PHP Version: 4.0.5
Previous Comments:
------------------------------------------------------------------------
[2001-07-27 14:23:12] lovan@lifesci.ucsb.edu
I'm using an integer to store an IP address as a 32-bit value rather
than a dotted-quad string and get odd results. Since I'm only using it
for shifting bits, I don't think it should matter that PHP is missing
an unsigned integer type.
$foo = (255 << 24) | (111 << 16) | (241 << 8) | 254;
$octet[0] = ($foo & 0xff000000) >> 24;
$octet[1] = ($foo & 0x00ff0000) >> 16;
$octet[2] = ($foo & 0x0000ff00) >> 8;
$octet[3] = ($foo & 0x000000ff);
$quad = "$octet[0].$octet[1].$octet[2].$octet[3]";
The expected end result is that I get a dotted-quad string ($quad) that
is the same as was used to build $foo.
Instead, $octet[0] is miscalculated; it appears as "0" instead of 255.
I've tried it for a variety of values and keep getting the same kind of
erroneous result.
However, if I change the statement to:
$octet[0] = (($foo >> 8) & 0x00ff0000) >> 16;
I get the expected result.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=12435&edit=1