Re: Help with some clever bit operations
| From: | David Tulloh | Date: | Tue, 13 Jun 2006 10:18:31 +0000 |
| Subject: | Re: Help with some clever bit operations | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-237872@lists.php.net to get a copy of this message | ||
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
>