ID: 3176 Comment by: sn_ at gmx dot net 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:
Using the following code I cannot reproduce the bug using php 5.1.2 or 5.2.0 <?php function toggle_bit ( &$bitfield, $bitvalue ) { $bitfield ^= $bitvalue; } $settings = 4; toggle_bit($settings, 10); echo $settings."\n"; Previous Comments: ------------------------------------------------------------------------ [2006-11-16 21:17:35] borg at servernet dot se Its still in 4.4.3! We need a fix for this. ------------------------------------------------------------------------ [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] [EMAIL PROTECTED] 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