Bitwise operators include:

& | AND |

&= | AND |

| | OR |

|= | OR |

^ | XOR |

~ | one's compliment |

<< | Shift Left |

>> | Shift Right |

<<= | Shift Left |

>>= | Shift Right |

These require two operands and will perform bit comparisions.

**AND &** will copy a bit to the result if it exists in both operands.

main() { unsigned int a = 60; /* 60 = 0011 1100 */ unsigned int b = 13; /* 13 = 0000 1101 */ unsigned int c = 0; c = a & b; /* 12 = 0000 1100 */ } |

**OR |** will copy a bit if it exists in eather operand.

main() { unsigned int a = 60; /* 60 = 0011 1100 */ unsigned int b = 13; /* 13 = 0000 1101 */ unsigned int c = 0; c = a | b; /* 61 = 0011 1101 */ } |

**XOR ^** copies the bit if it is set in one operand (but not both).

main() { unsigned int a = 60; /* 60 = 0011 1100 */ unsigned int b = 13; /* 13 = 0000 1101 */ unsigned int c = 0; c = a ^ b; /* 49 = 0011 0001 */ } |

Try it out with the simulator |

This operator is unary (requires one operand) and has the efect of 'flipping' bits.

main() { unsigned int Value=4; /* 4 = 0000 0100 */ Value = ~ Value; /* 251 = 1111 1011 */ } |

Try it out with the simulator |

The following operators can be used for shifting bits left or right.

<< | >> | <<= | >>= |

The left operands value is moved left or right by the number of bits specified by the right operand. For example:

main() { unsigned int Value=4; /* 4 = 0000 0100 */ unsigned int Shift=2; Value = Value << Shift; /* 16 = 0001 0000 */ Value <<= Shift; /* 64 = 0100 0000 */ printf("%d\n", Value); /* Prints 64 */ } |

Usually, the resulting 'empty' bit is assigned ZERO. Please use unsigned variables with these operators to avoid unpredictable results.

Try them out with the simulator |

All the other
Expressions and operators.

Operator precedence.

Assignment Operators.

Top | Master Index | Keywords | Functions |

Martin Leslie