All pastes #770629 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-11-12 13:38 UTC
rendered paste body
 \ произвести реверс бит указанного числа

 REQUIRE FOR            devel\~mOleg\lib\util\for-next.f

: B. BASE @ 2 BASE ! SWAP
     0 <# 32 FOR # TILL #> TYPE
     BASE ! ;

: revcell ( u --> u )
          DUP 1 LSHIFT 0xAAAAAAAA AND SWAP 0x55555555 AND OR    DUP CR B.
          DUP 2 LSHIFT 0xCCCCCCCC AND SWAP 0x33333333 AND OR    DUP CR B.
          DUP 4 LSHIFT 0xF0F0F0F0 AND SWAP 0x0F0F0F0F AND OR    DUP CR B.
          DUP 8 LSHIFT 0xFF00FF00 AND SWAP 0x00FF00FF AND OR    DUP CR B.
          DUP 0x10 LSHIFT 0xFFFF0000 AND SWAP 0x0000FFFF AND OR DUP CR B.
          ;

\ для массива addr # произвести битовый реверс
: revarr ( addr # --> )
         FOR DUP @ revcell OVER !
             CELL +
         TILL DROP ;

HEX 12345678 DUP B. CR revcell B.