ABL electronic PIC12 Personal Computer User Manual


 
/* Similarly: */
0x1234 | 0x5678;
/* equals 0x567C */
0x1234 ^ 0x5678;
/* equals 0x444C */
~ 0x1234;
/* equals 0xEDCB */
Bitwise Shift Operators
Binary operators
<< and >> move the bits of the left operand for a number of posi-
tions specified by the right operand, to the left or right, respectively. Right operand
has to be positive.
With shift left (
<<), left most bits are discarded, and “new” bytes on the right are
assigned zeros. Thus, shifting unsigned operand to left by n positions is equivalent
to multiplying it by 2n if all the discarded bits are zero. This is also true for signed
operands if all the discarded bits are equal to sign bit.
000001 << 5;
/* equals 000040 */
0x3801 << 4;
/* equals 0x8010, overflow! */
With shift right (>>), right most bits are discarded, and the “freed” bytes on the
left are assigned zeros (in case of unsigned operand) or the value of the sign bit
zeros (in case of signed operand). Shifting operand to right by n positions is equiv-
alent to dividing it by 2n.
0xFF56 >> 4;
/* equals 0xFFF5 */
0xFF56u >> 4;
/* equals 0x0FF5 */
Bitwise vs. Logical
Be aware of the principle difference between how bitwise and logical operators
work. For example:
0222222 & 0555555;
/* equals 000000 */
0222222 && 0555555;
/* equals 1 */
~ 0x1234;
/* equals 0xEDCB */
! 0x1234;
/* equals 0 */
mikroC
- C Compiler for Microchip PIC microcontrollers
mikroC
making it simple...
10 6
MikroElektronika:
Development
tools
-
Books
-
Compilers
page