Copyright | [2016..2017] Manuel M T Chakravarty Gabriele Keller Trevor L. McDonell |
---|---|
License | BSD3 |
Maintainer | Trevor L. McDonell <tmcdonell@cse.unsw.edu.au> |
Stability | experimental |
Portability | non-portable (GHC extensions) |
Safe Haskell | None |
Language | Haskell98 |
Data.Array.Accelerate.Data.Bits
Description
Bitwise operations for signed and unsigned integer expressions.
- class Eq a => Bits a where
- class Bits b => FiniteBits b where
Documentation
The Bits
class defines bitwise operations over integral scalar expression
types. As usual, bits are numbered from zero, with zero being the least
significant bit.
Minimal complete definition
(.&.), (.|.), xor, complement, (shift | shiftL, shiftR), (rotate | rotateL, rotateR), isSigned, testBit, bit, popCount
Methods
(.&.) :: Exp a -> Exp a -> Exp a infixl 7 #
Bitwise "and"
(.|.) :: Exp a -> Exp a -> Exp a infixl 5 #
Bitwise "or"
xor :: Exp a -> Exp a -> Exp a infixl 6 #
Bitwise "xor"
complement :: Exp a -> Exp a #
Reverse all bits in the argument
shift :: Exp a -> Exp Int -> Exp a infixl 8 #
shifts shift
x ix
left by i
bits if i
is positive, or right by
-i
bits otherwise. Right shifts perform sign extension on signed number
types; i.e. they fill the top bits with 1 if the x
is negative and with
0 otherwise.
rotate :: Exp a -> Exp Int -> Exp a infixl 8 #
rotates rotate
x ix
left by i
bits if i
is positive, or right
by -i
bits otherwise.
The value with all bits unset
bit i
is a value with the i
th bit set and all other bits clear.
setBit :: Exp a -> Exp Int -> Exp a #
x `setBit` i
is the same as x .|. bit i
clearBit :: Exp a -> Exp Int -> Exp a #
x `clearBit` i
is the same as x .&. complement (bit i)
complementBit :: Exp a -> Exp Int -> Exp a #
x `complementBit` i
is the same as x `xor` bit i
testBit :: Exp a -> Exp Int -> Exp Bool #
Return True
if the n
th bit of the argument is 1
isSigned :: Exp a -> Exp Bool #
Return True
if the argument is a signed type.
shiftL :: Exp a -> Exp Int -> Exp a infixl 8 #
Shift the argument left by the specified number of bits (which must be non-negative).
unsafeShiftL :: Exp a -> Exp Int -> Exp a #
Shift the argument left by the specified number of bits. The result is
undefined for negative shift amounts and shift amounts greater or equal to
the finiteBitSize
.
shiftR :: Exp a -> Exp Int -> Exp a infixl 8 #
Shift the first argument right by the specified number of bits (which must be non-negative).
Right shifts perform sign extension on signed number types; i.e. they fill
the top bits with 1 if x
is negative and with 0 otherwise.
unsafeShiftR :: Exp a -> Exp Int -> Exp a #
Shift the first argument right by the specified number of bits. The
result is undefined for negative shift amounts and shift amounts greater or
equal to the finiteBitSize
.
rotateL :: Exp a -> Exp Int -> Exp a infixl 8 #
Rotate the argument left by the specified number of bits (which must be non-negative).
rotateR :: Exp a -> Exp Int -> Exp a infixl 8 #
Rotate the argument right by the specified number of bits (which must be non-negative).
popCount :: Exp a -> Exp Int #
Return the number of set bits in the argument. This number is known as the population count or the Hamming weight.
class Bits b => FiniteBits b where #
Minimal complete definition
Methods
finiteBitSize :: Exp b -> Exp Int #
Return the number of bits in the type of the argument.
countLeadingZeros :: Exp b -> Exp Int #
Count the number of zero bits preceding the most significant set bit. This can be used to compute a base-2 logarithm via:
logBase2 x = finiteBitSize x - 1 - countLeadingZeros x
countTrailingZeros :: Exp b -> Exp Int #
Count the number of zero bits following the least significant set bit. The related find-first-set operation can be expressed in terms of this as:
findFirstSet x = 1 + countTrailingZeros x
Instances