Bitwise operations

Bitwise operators include:

 & AND &= AND Assignment | OR |= OR Assignment ^ XOR ^= XOR Assignment ~ one's compliment << Shift Left << Shift Left >>= Shift Right Assignment >>= Shift Right Assignment

AND OR and XOR

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 */ } XOR example program which swaps the contents of two variables.

Try it out with one of these simulators.

Ones Complement

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

Bit shift.

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 it out with one of these silulators

Examples: AND OR Bit shifting.

Problem: Bit shifting problem. All the other Expressions and operators. Operator precedence. Assignment Operators.