
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.




(defun bitwise (a b)
  (lists:map
    (lambda (x) (io:format "~p~n" `(,x)))
    `(,(band a b) 
      ,(bor a b)
      ,(bxor a b)
      ,(bnot a)
      ,(bsl a b)
      ,(bsr a b)))
  'ok)
 
(defun dec->bin (x) 
  (integer_to_list x 2))
 
(defun describe (func arg1 arg2 result)
  (io:format "(~s ~s ~s): ~s~n" 
             (list func (dec->bin arg1) (dec->bin arg2) (dec->bin result))))
 
(defun bitwise
  ((a b 'binary)
    (describe "band" a b (band a b))
    (describe "bor" a b (bor a b))
    (describe "bxor" a b (bxor a b))
    (describe "bnot" a b (bnot a))
    (describe "bsl" a b (bsl a b))
    (describe "bsr" a b (bsr a b))))
 