|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2000-01-11 07:56 UTC] 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... */ PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Nov 07 20:00:01 2025 UTC |
Here's the toggle_bit function: function toggle_bit ( &$bitfield, $bitvalue ) { $bitfield ^= $bitvalue; }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";