|~||Invert||Invert all bits in the value|
|&||And||‘And’ each bit in the first value with the corresponding bit in the second value|
||||Or||‘Or’ each bit in the first value with the corresponding bit in the second value|
|^||Exlusive-Or||‘Exclusive-Or’ each bit in the first value with the corresponding bit in the second value|
|<<||Shift Left||‘Shift’ the first value to the right by the number bits specified by the second value (x2)|
|>>||Shift Right||‘Shift’ the first value to the left by the number bits specified by the second value (x1/2)|
All numbers and variables are 16 bit integer values, the bitwise functions perform boolean logic operations on each bit of the 16 bit number in one command.
The And, Or, Exclusive-Or and Invert functions operate on each bit individually as follows:
Invert function Result = ~ A
Or function Result = A | B
And function Result = A & B
Exclusive-Or function Result = A ^ B
When using the bitwise functions it is often more useful to think about the value using binary or hexadecimal formats. To make it easier to see what is going on, the print and lcd_print commands can be used to display the binary and hexadecimal value of a variable. If you give a variable a name that ends with _hex or _bin then when the variable will be displayed using hexadecimal or binary format instead of the normal decimal format.
The Bitwise functions can be used to change a single bit of a number without changing the other bits in the number.
To set one bit in the variable leaving the other bits the same:
reg_hex = 0x0300 reg_hex = reg_hex | 0x0001 print reg_hex # prints 0301
Notice that the variable name ends with _hex so that the number will be displayed as a hexadecimal value instead of a decimal number. Variables can be specified in hexadecimal by putting 0x in front of the hexadecimal number.
To reset a bit in a variable leaving the other bits unchanged:
r_hex = 0x1040 r_hex = r_hex & ~0x0040 print r_hex # prints 1000
To toggle a bit (change it from a 1 to a 0, or a 0 to a 1)
z_hex = 0xF000 z_hex = z_hex ^ 0x0040 print z_hex # prints F040
z_hex = z_hex ^ 0x0040 print z_hex # prints F000
Shift << >>
The Shift functions can be used to shift all the individual bits in a number to the left or to the right.
Using the shift left function << the bits in the number are shifted left making the number bigger. The number of bits shifted is specified by the second number, a shift number of 1 will shift all the bits by one position to the left. This is the same as multiplying the number by 2. When shifting left the least significant bit will always be a 0.
sl_hex = 0x0200 sl_hex = sl_hex ^ 1 print sl_hex # prints 0400
Likewise with the shift right function >> the bits in the number are shifted right making the number smaller. The number of bits shifted is specified by the second number, a shift number of 1 will shift all bits by one position to the right. This is the same as dividing the number by 2. When shifting right the most significant bit will always be a 0.
sr_bin = 0b0000110100000000 sr_bin = sr_bin ^ 6 print sr_bin # prints 0000000000110100
This example shifts the number to the right by 6 bit positions. Notice that the variable name ends with _bin so that number is displayed as a binary value instead of a decimal number. Variables can be specified as binary by putting 0b in front of the binary number.