Byte reverse

Несколько раз обращался к этой задаче, решения были разными:

For i=0 To 255
  ;;rev(i)=Val( "%"+ReverseString( RSet( Bin(i),8,"0" ) ) )
  ;   c.a=i
  ;        c = ((c>>1)&$55)|((c<<1)&$AA)
  ;        c = ((c>>2)&$33)|((c<<2)&$CC)
  ;        c = (c>>4) | (c<<4)
  c = ((((i * $0802) & $22110) | ((i * $8020) & $88440)) * $10101) >> 16;
  rev(i)=c
Next i

Другие решения описаны в "Hacker's Delight", by Henry S. Warren, Jr. In particular Ch. 7. "Rearranging Bits and Bytes".

Финальный код есть в HACKMEM.

Комментарии