
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.




/*  for symmetry with Kotlin's other binary bitwise operators
    we wrap Java's 'rotate' methods as infix functions */
infix fun Int.rol(distance: Int): Int = Integer.rotateLeft(this, distance)
infix fun Int.ror(distance: Int): Int = Integer.rotateRight(this, distance)
 
fun main(args: Array<String>) {
    // inferred type of x and y is Int i.e. 32 bit signed integers
    val x = 10
    val y = 2
    println("x       = $x")
    println("y       = $y")
    println("NOT x   = ${x.inv()}")
    println("x AND y = ${x and y}")
    println("x OR  y = ${x or y}")
    println("x XOR y = ${x xor y}")
    println("x SHL y = ${x shl y}")
    println("x ASR y = ${x shr y}")   // arithmetic shift right (sign bit filled)
    println("x LSR y = ${x ushr y}")  // logical shift right    (zero filled)
    println("x ROL y = ${x rol y}")
    println("x ROR y = ${x ror y}")
}