( SHIFT       logical shift unsigned-number by n bit positions )

need **
: shift                           ( un1 n --- un2 )
  2 over abs **                   ( shift factor = 2**abs[n])
  swap 0<                         ( determine shift direction)
  if                              ( left shift)
    0 swap                        ( make un1 a double number)
    u/                            ( and divide by shift factor)
    drop swap drop                ( leave unsigned quotient)
  else                            ( right shift)
    u*                            ( multiply by shift factor)
    drop                          ( leave unsigned product)
  endif
;
