
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.




$ include "seed7_05.s7i";
  include "bin32.s7i";
 
const proc: bitwise (in integer: a, in integer: b) is func
  begin
    writeln("a:        " <& a  radix 2 lpad0 32);
    writeln("b:        " <& b  radix 2 lpad0 32);
    writeln("integer operations:");
    writeln("a << b:   " <& a << b  radix 2 lpad0 32); # left shift
    writeln("a >> b:   " <& a >> b  radix 2 lpad0 32); # arithmetic right shift
  end func;
 
const proc: bitwise (in bin32: a, in bin32: b) is func
  begin
    writeln("bin32 operations:");
    writeln("a and b:  " <& a & b  radix 2 lpad0 32);
    writeln("a or b:   " <& a | b  radix 2 lpad0 32);
    writeln("a xor b:  " <& a >< b  radix 2 lpad0 32);
    writeln("not a:    " <& ~a  radix 2 lpad0 32);
    writeln("a << b:   " <& a << ord(b)  radix 2 lpad0 32);  # left shift
    writeln("a >> b:   " <& a >> ord(b)  radix 2 lpad0 32);  # logical right shift
    writeln("a rotL b: " <& rotLeft(a, ord(b))  radix 2 lpad0 32);  # Rotate Left
    writeln("a rolR b: " <& rotRight(a, ord(b))  radix 2 lpad0 32); # Rotate Right
  end func;
 
const proc: main is func
  begin
    bitwise(65076, 6);
    bitwise(bin32(65076), bin32(6));
  end func;