RE: Help with some clever bit operations

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

 



On Tuesday 13 June 2006 12:32, Ford, Mike wrote:

> 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
 [snip]

Thanks! I appreciate your effort!

Regards,
Niels

-- 
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