RE: Help with some clever bit operations

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 13 June 2006 10:31, Niels wrote:

> Hi,
> 
> I have a problem I can solve with some loops and if-thens,
> but I'm sure it
> can be done with bit operations -- that would be prettier.
> I've tried to
> work it out on paper, but I keep missing the final solution. Maybe
> I'm missing something obvious... 
> 
> The problem: A function tries to update an existing value, but is only
> allowed to write certain bits.
> 
> There are 3 variables:
> A: the existing value, eg. 10110101
> B: what the function wants to write, eg. 01011100
> C: which bits the function is allowed to write, eg. 00001111
> 
> With these examples, 10111100 should be written.
> 
> How do I combine A, B and C to get that result?

First use & (bitwise-and) to mask out bits the function is not allowed to write:

    $b & $c // result is 00001100 given above inputs

Then mask the bits that the function will write out of the original value - negate the mask and use & again:

    $a & ~$c // result is 10110000

Then combine the two using | (bitwise-or):

    ($a & ~$c) | ($b & $c) // result is 10111101


Cheers!

Mike

---------------------------------------------------------------------
Mike Ford,  Electronic Information Services Adviser,
Learning Support Services, Learning & Information Services,
JG125, James Graham Building, Leeds Metropolitan University,
Headingley Campus, LEEDS,  LS6 3QS,  United Kingdom
Email: m.ford@xxxxxxxxxxxxxx
Tel: +44 113 283 2600 extn 4730      Fax:  +44 113 283 3211 


To view the terms under which this email is distributed, please go to http://disclaimer.leedsmet.ac.uk/email.htm

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux