Many programming languages for robot control support unique forms of operators that work with numbers only and let you manipulate the individual bits that make up those numbers. These are called bitwise operators. The following list shows the common characters or names used for bitwise operators. Note that some languages don’t distinguish between bitwise and relational (logical) operators.
Operator Symbol |
Name |
Function |
Not or ~ |
Bitwise Not |
Reverses the bits in a number; 1s become 0s and vice versa |
And or & |
Bitwise And |
Performs And on each bit in a number |
Or or | |
Bitwise Or |
Performs Or on each bit in a number |
Xor or ^ |
Bitwise Xor |
Performs Xor on each bit in a number |
<< |
Shift left |
Shifts the values of the bits 1 or more bits to the left |
>> |
Shift right |
Shifts the values of the bits 1 or more bits to the right |
Let’s use some bitwise operators in an example. Suppose you assign 9 to variable This and 14 to variable That. If you bitwise And (& symbol) the two together, you get 8 as a result. Here are the binary equivalents of the values 9 and 14 (only 4 bits are shown, since 9 and 14 can be expressed with just 4 bits):
Decimal Number |
Binary Equivalent |
9 |
1001 |
14 |
1110 |
Using the And truth table given earlier, manually compute what happens when you bitwise And these two numbers together:
|
1001 = 9 |
Using the same numbers for a bitwise Or computation, we get:
|
1001 = 9 |
Here’s just one example of how this bitwise stuff is handy in robotics: bitwise And and bitwise Or are commonly used to control the output state of a robot’s computer or microcontroller I/O port. The port typically has eight output pins, each of which can be connected to something, like a motor. Suppose the following 4 bits control the activation of four motors. When “0,” the motor is off; when “1,” the motor is on.
0000 |
All motors off |
0010 |
Second motor on |
1100 |
Fourth and third motor on |
. . . and so forth. Here the rightmost bit is motor 1, and the leftmost is motor 4. |
Suppose your program has already turned on motors 1 and 4 at some earlier time, and you want them to stay on. You also want to turn motor 3 on (motor 2 stays off). All you have to do is get the current value of the motor port:
1001 |
Motors 1 and 4 on (decimal value equivalent is 9) |
You then bitwise Or this result with
0100 |
Motor 3 on (decimal value equivalent is 4) |
Here’s how the bitwise Or expression turns out:
|
1001 = 9 |
In this example, Or’ing 9 and 4 happens to be the same as adding the decimal values of the numbers together. This is not always the case. For example, Or’ ing 1 and 1 results in 1, not 2.
For your reference, the following table shows the binary equivalents of the first 16 binary digits, counting zero as the first digit and ending with 15. You can count higher by adding an extra 1 digit on the left. The extra digit increases the count by a power of two—31, 63, 127, 255, 511, 1023, and so on.
Decimal Number |
In Binary |
Decimal Number |
In Binary |
0 |
0000 |
8 |
1000 |
1 |
0001 |
9 |
1001 |
2 |
0010 |
10 |
1010 |
3 |
0011 |
11 |
1011 |
4 |
0100 |
12 |
1100 |
5 |
0101 |
13 |
1101 |
6 |
0110 |
14 |
1110 |
7 |
0111 |
15 |
1111 |