Hi,

Disregard my previous message, I got your idea =) When we are shifting
right then left, then all bits except 7th will be 0 and andmask may be
any, while it contains 0x80. Yes everything is ok here, thanks

---
With best regards, Konstantin

On Tue, Jul 23, 2013 at 5:05 PM, Konstantin Vladimirov
<konstantin.vladimi...@gmail.com> wrote:
> Hi,
>
> But this is awfully wrong. In the general case (value >> 2) & 0xff !=
> (value >> 2) & 0x80
>
> Take value to be 0x3ff for example. Then 0xff != 0x80 itself. This
> leads to wrong result.
>
> ---
> With best regards, Konstantin
>
> On Tue, Jul 23, 2013 at 4:57 PM, David Given <d...@cowlark.com> wrote:
>> Konstantin Vladimirov wrote:
>> [...]
>>> x = (y & ~(1 << 7)) | (((value >> 9) & 1) << 7);
>> [...]
>>> x = y & 4294967167 | (value >> 9) << 7 & 255; <--------- WAT?
>>
>>
>>    ((value >> 9) & 1) << 7
>> == ((value >> 9) << 7) & (1 << 7)
>> == ((value >> 9) << 7) & 0x80
>> == ((value >> 9) << 7) & 0xff
>>
>> ...I think.
>>
>> That last step is probably being done because anding with 0xff is really
>> cheap on x86 (you just pick the appropriate subreg --- al instead of
>> eax, for example).
>>
>> --
>> ┌─── dg@cowlark.com ───── http://www.cowlark.com ─────
>> │ "USER'S MANUAL VERSION 1.0:  The information presented in this
>> │ publication has been carefully for reliability." --- anonymous
>> │ computer hardware manual
>>

Reply via email to