
Basic Data Operation

This is a basic data operation. It represents a fundamental action on a basic data type.
You may see other such operations in the Basic Data Operations category, or:


Integer Operations
Arithmetic |
Comparison
Boolean Operations
Bitwise |
Logical
String Operations
Concatenation |
Interpolation |
Comparison |
Matching
Memory Operations
Pointers & references |
Addresses




Task

Write a routine to perform a bitwise AND, OR, and XOR on two integers, a bitwise NOT on the first integer, a left shift, right shift, right arithmetic shift, left rotate, and right rotate.

All shifts and rotates should be done on the first integer with a shift/rotate amount of the second integer.

If any operation is not available in your language, note it.




import Data.Bits
 
bitwise :: Int -> Int -> IO ()
bitwise a b =
  mapM_
    print
    [ a .&. b
    , a .|. b
    , a `xor` b
    , complement a
    , shiftL a b -- left shift
    , shiftR a b -- arithmetic right shift
    , shift a b -- You can also use the "unified" shift function;
      -- positive is for left shift, negative is for right shift
    , shift a (-b)
    , rotateL a b -- rotate left
    , rotateR a b -- rotate right
    , rotate a b -- You can also use the "unified" rotate function;
      -- positive is for left rotate, negative is for right rotate
    , rotate a (-b)
    ]
 
main :: IO ()
main = bitwise 255 170