
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.




function bitops(a, b)
  s = sprintf("%s %%s %s = %%s\n", dec2bin(a), dec2bin(b));
  printf(s, "or", dec2bin(bitor(a, b)));
  printf(s, "and", dec2bin(bitand(a, b)));
  printf(s, "xor", dec2bin(bitxor(a, b)));
  printf(s, "left shift", dec2bin(bitshift(a, abs(b))));
  printf(s, "right shift", dec2bin(bitshift(a, -abs(b))));
  printf("simul not %s = %s", dec2bin(a), dec2bin(bitxor(a, 0xffffffff)));
endfunction
 
bitops(0x1e, 0x3);