
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.




use integer;
 
sub bitwise($$) {
   ($a, $b) = @_;
   print 'a and b: '. ($a & $b) ."\n";
   print 'a or b: '.  ($a | $b) ."\n";
   print 'a xor b: '. ($a ^ $b) ."\n";
   print 'not a: '.   (~$a)     ."\n";
   print 'a >> b: ', $a >> $b, "\n"; # logical right shift
 
   use integer; # "use integer" enables bitwise operations to return signed ints
   print "after use integer:\n";
   print 'a << b: ', $a << $b, "\n"; # left shift
   print 'a >> b: ', $a >> $b, "\n"; # arithmetic right shift
}