7-6
Rearrangements and Index Transformations
Many simple rearrangements of the bits in a
computer word correspond to even simpler transformations of the coordinates, or
indexes, of the bits [GLS1]. These
correspondences apply to rearrangements of the elements of any one-dimensional
array, provided the number of array elements is an integral power of 2. For
programming purposes, they are useful primarily when the array elements are a
computer word or larger in size.
As an example, the outer perfect shuffle of
the elements of an array A of size eight, with
the result in array B, consists of the
following moves:

 
Each B-index
is the corresponding A-index rotated left one
position, using a 3-bit rotator. The outer perfect unshuffle
is of course accomplished by rotating right
each index. Some similar correspondences are shown in Table 7-1. Here n is the number of array elements, "lsb"
means least significant bit, and the rotations of indexes are done with a log2n-bit rotator.
 
  
  Table 7-1.
  Rearrangements and Index Transformations
   | 
 
 
  | 
     
   | 
  
   Index Transformation 
   | 
 
 
  | 
   Rearrangement 
   | 
  
   Array Index, or Big-endian Bit
  Numbering 
   | 
  
   Little-endian Bit Numbering 
   | 
 
 
  | 
   Reversal 
   | 
  
   Complement 
   | 
  
   Complement 
   | 
 
 
  | 
   Bit flip, or generalized reversal (page
  102) 
   | 
  
   Exclusive or with a constant 
   | 
  
   Exclusive or with a constant 
   | 
 
 
  | 
   Rotate left k positions 
   | 
  
   Subtract k (mod n) 
   | 
  
   Add k (mod n) 
   | 
 
 
  | 
   Rotate right k positions 
   | 
  
   Add k (mod n) 
   | 
  
   Subtract k (mod n) 
   | 
 
 
  | 
   Outer perfect shuffle 
   | 
  
   Rotate left one position 
   | 
  
   Rotate right one position 
   | 
 
 
  | 
   Outer perfect unshuffle 
   | 
  
   Rotate right one position 
   | 
  
   Rotate left one position 
   | 
 
 
  | 
   Inner perfect shuffle 
   | 
  
   Rotate left one, then complement lsb 
   | 
  
   Complement lsb, then rotate right one 
   | 
 
 
  | 
   Inner perfect unshuffle 
   | 
  
   Complement lsb, then rotate right 
   | 
  
   Rotate left one, then complement lsb 
   | 
 
 
  | 
   Transpose of an 8x8-bit matrix held in a 64-bit word 
   | 
  
   Rotate (left or right) three positions 
   | 
  
   Rotate (left or right) three positions 
   | 
 
 
  | 
   FFT unscramble 
   | 
  
   Reverse bits 
   | 
  
   Reverse bits 
   |