Mikroc – ABL electronic PIC Microcontrollers PIC16 User Manual

Page 114

Advertising
background image

/* 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...

106

MikroElektronika: Development tools - Books - Compilers

page

Advertising
This manual is related to the following products: