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 >