
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.




var rl = Fn.new { |x, y| x << y | x >> (32-y) }
 
var rr = Fn.new { |x, y| x >> y | x << (32-y) }
 
var bitwise = Fn.new { |x, y|
    if (!x.isInteger || !y.isInteger || x < 0 || y < 0 || x > 0xffffffff || y > 0xffffffff) {
        Fiber.abort("Operands must be in the range of a 32-bit unsigned integer")
    }
    System.print(" x      = %(x)")
    System.print(" y      = %(y)")
    System.print(" x & y  = %(x & y)")
    System.print(" x | y  = %(x | y)")
    System.print(" x ^ y  = %(x ^ y)")
    System.print("~x      = %(~x)")
    System.print(" x << y = %(x << y)")
    System.print(" x >> y = %(x >> y)")
    System.print(" x rl y = %(rl.call(x, y))")
    System.print(" x rr y = %(rr.call(x, y))")
}
 
bitwise.call(10, 2)