SHIFT is a positive or negative integer whose absolute value is less than or
equal to SIZE.
SIZE is an optional positive integer less than or equal to BIT_SIZE (I). The
default value of SIZE is BIT_SIZE(I).
A positive value of SHIFT denotes a shift to the left. The leftmost SIZE bits
are processed and SHIFT bits are shifted out from one end and shifted in from
the opposite end. The result has the same kind type as I.