#3176 [Com]: Using Bit manupulation ( Bitwise AND, OR, XOR, NOT) do not work as expected
| From: | borg at servernet dot se | Date: | Thu, 16 Nov 2006 21:17:38 +0000 |
| Subject: | #3176 [Com]: Using Bit manupulation ( Bitwise AND, OR, XOR, NOT) do not work as expected | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-105124@lists.php.net to get a copy of this message | ||
ID: 3176
Comment by: borg at servernet dot se
Reported By: markj at usn dot nl
Status: Wont Fix
Bug Type: Misbehaving function
Operating System: HPUX/10
PHP Version: 3.0.13
New Comment:
Its still in 4.4.3!
We need a fix for this.
Previous Comments:
------------------------------------------------------------------------
[2005-12-16 10:03:35] nite2quake at yahoo dot co dot uk
I'm currently using PHP5 and I still seem to have this bug effecting my
scripts.
Paul
------------------------------------------------------------------------
[2005-03-30 09:03:12] sniper@php.net
We are sorry, but we can not support PHP 3 related problems anymore.
Momentum is gathering for PHP 5, and we think supporting PHP 3 will
lead to a waste of resources which we want to put into getting PHP 5
ready. Of course PHP 4 will continue to be supported for the
forseeable future.
------------------------------------------------------------------------
[2000-01-11 08:37:45] markj at usn dot nl
Here's the toggle_bit function:
function toggle_bit ( &$bitfield, $bitvalue )
{
$bitfield ^= $bitvalue;
}
------------------------------------------------------------------------
[2000-01-11 07:56:44] markj at usn dot nl
I encountered this with version 4.0b3, but I suspect it to be in other
versions too... i'll check as soon as I can get 3 running somewhere...
I'm currently using PHP4.0b3, and have encountered some inconsistencies
when manipulating
an integer number at the bit level. I use this integer 'settings' to
store up to 30 user-configurable
settings for my application. 0 being that all are turned off.
When I toggle a specific bit (with my own function toggle_bit(
&$bitfield, $bitnr ) (included below))
i get really strange results if I for example do this:
$settings = 0;
toggle_bit( $settings, 1 ) /* This should toggle bit with value 1,
making $settings 1... */
echo $settings /* This will return garbage... */
This gives random results (probably because $settings is signed, the
result always has a
1 as the first bit (when i do bindec), but isn't -1 (two's complement)
When I first 'turn my value into a unsigned int' by or-ing it with 0:
$settings = 0
$newset = ( $settings | 0 )
toggle_bit( $newset, 1 )
echo $newset /* This will return the expected value of 1... */
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=3176&edit=1