
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.




| testBitFunc |
testBitFunc := [ :a :b |
     ('%1 and %2 is %3' % { a. b. (a bitAnd: b) }) displayNl.
     ('%1 or %2 is %3' % { a. b. (a bitOr: b) }) displayNl.
     ('%1 xor %2 is %3' % { a. b. (a bitXor: b) }) displayNl.
     ('not %1 is %2' % { a. (a bitInvert) }) displayNl.
     ('%1 left shift %2 is %3' % { a. b. (a bitShift: b) }) displayNl.
     ('%1 right shift %2 is %3' % { a. b. (a bitShift: (b negated)) }) displayNl.
 ].
testBitFunc value: 16r7F value: 4 .