The example starting values
$existing = 181; # = 10110101
$new = 92; # = 01011100
$mask = 15; # = 00001111

Get the bits that will be changed
$changing = $new & $mask; # = 12 = 00001100

Get the bits that won't be changed
$staying = $existing & ~$mask; # = 176 = 10110000

Combine them together
$result = $changing ^ $staying; # = 188 = 10111100


David

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?
> 
> 
> Thanks,
> Niels
> 

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

Reply via email to