The bitwise logical operators perform bit by bit logical operations on variables. Here are the 6 bitwise operators of C :

Operator | Description | Type |
---|---|---|

`&` |
AND |
binary |

`|` |
OR |
binary |

`^` |
XOR |
binary |

`~` |
NOT |
unary |

`>>` |
Right shift |
binary |

`<<` |
Left shift |
binary |

A logical AND is a binary operation whose output `s`

is true only if
both inputs (`a`

and `b`

) are true:

a | b | s |
---|---|---|

0 | 0 | 0 |

0 | 1 | 0 |

1 | 0 | 0 |

1 | 1 | 1 |

When this operator is used on variables, it is applied bit by bit. That is to say that the first bit of the result is the logical AND of the first bit of the first operand and of the first bit of the second operand. We will come back to this in detail in the next lesson.

An OR is a binary operation whose output `s`

is true if

- one of the inputs is true (
`a`

or`b`

); - both inputs are true (
`a`

and`b`

):

a | b | s |
---|---|---|

0 | 0 | 0 |

0 | 1 | 1 |

1 | 0 | 1 |

1 | 1 | 1 |

An exclusive OR (XOR) is a binary operation whose output `s`

is true if and only
if one of the two inputs (`a`

and `b`

) is true:

a | b | s |
---|---|---|

0 | 0 | 0 |

0 | 1 | 1 |

1 | 0 | 1 |

1 | 1 | 0 |

When speaking, we do not distinguish between OR and exclusive OR. Here are two examples:

*France or Italy will win the World Cup*This is an exclusive OR because the two cannot win in the same year: it is one or the other.*You can do either exercise 1 or exercise 2.*This is an inclusive OR because it is possible to do exercise 1, exercise 2 or both. Sometimes the notation*and/or*is used, which corresponds to the inclusive OR.

NOT is a unary operation whose output `s`

is true if and only if the input `a`

is false. This
operator inverts the input bits:

a | s |
---|---|

0 | 1 |

1 | 0 |

**In C, what is the bitwise AND operator?**

Check
Bravo !

`&`

is the bitwise AND operator.
Try again...
**In C, what is the bitwise OR operator?**

Check
Bravo !

`|`

is the bitwise OR operator.
Try again...
**In C, what is the bitwise NOT operator?**

Check
Bravo !

`~`

is the bitwise NOT operator.
Try again...
**In C, what is the purpose of the ^ operator?**

Check
Good for you! In C, the circumflex is the exclusive OR operator and not the exponent.
Try again...

**Which are the binary operators (which accept two operands)?**

Check
Bravo ! NOT (

`~`

) necessarily a unary operator.
Try again...
- Learn C programming
- Lesson 1.1. History of C programming language
- Lesson 1.2. First program
- Lesson 1.3. Compilation
- Lesson 1.4. Preprocessor directives
- Lesson 1.5. Which compiler to choose?
- Lesson 1.6. Flowchart
- Lesson 2.1. Types and variables
- Lesson 2.2. Integers
- Lesson 2.3. Floating point numbers
- Lesson 2.4. Characters
- Lesson 2.5. Variables initialization
- Lesson 2.6. Ariane flight 501
- Lesson 3.1. Arithmetic operators
- Lesson 3.2. modulo
- Lesson 3.3. Operators and types
- Lesson 3.4. Type casting
- Lesson 3.6. Bitwise operators details
- Lesson 3.7. Shifting operators
- Lesson 3.8. Assignment operators
- Lesson 3.9. Increment and decrement operators
- Lesson 3.10. Comparison operators
- Lesson 3.11. Logical operators
- Lesson 3.12. Operator precedence
- Lesson 4.1. printf
- Lesson 4.2. scanf
- Lesson 4.3. putchar
- Lesson 5.1. Conditional branching (if...else)
- Lesson 5.2. Nested if and indentation
- Lesson 5.3. Checking intervals
- Lesson 5.4. Ternary Operator ?:
- Lesson 5.5. switch..case statement
- Lesson 5.6. Break keyword in switch..case
- Lesson 6.1. do..while loop in C
- Lesson 6.2. While loop in C
- Lesson 6.3. For loop in C
- Lesson 6.4. How to choose the right loop in C ?
- Lesson 6.5. Exercices on loops in C
- Lesson 7.1. Bit masking
- Lesson 7.2. Bit masking, how to clear a bit in C?
- Lesson 7.3. Bit masking, how to set a bit in C?
- Lesson 7.4. Bit masking, how to toggle a bit in C?
- Lesson 7.5. Bit masking, how to check a single bit in C?
- Lesson 7.6. Overview of bit masking
- Lesson 8.1. Basic syntax of C functions
- Lesson 8.2. Calling C functions
- Lesson 8.3. Void keyword
- Lesson 8.4. Return keyword
- Lesson 8.5. Variable scope
- Lesson 8.6. Global variables
- Lesson 8.7. Static variables
- Lesson 8.8. Random numbers in C
- Lesson 8.9. Mathematical functions in C
- Lesson 9.1. Syntax of C arrays
- Lesson 9.2. Array initialization
- Lesson 9.3. Multidimensional arrays
- Lesson 9.4. How C arrays are stored in memory?
- Lesson 9.5. Arrays and functions
- Lesson 9.6. Exercises on C arrays
- Lesson 10.1. Strings in C
- Lesson 10.2. Null terminated string
- Lesson 10.3. The string.h library
- Lesson 10.4. String and functions
- Lesson 11.1. Introduction to pointers in C
- Lesson 11.2. Syntax of C pointers
- Lesson 11.3. Dynamic memory allocation
- Lesson 11.4. Incrementing pointers
- Lesson 11.5. Pointers as function argument in C
- Lesson 12.1. Introduction to structures in C
- Lesson 12.2. Properties of structures in C
- Lesson 12.3. Structures and pointers
- Lesson 12.4. Structures and functions
- Lesson 13.1. Recursive functions in C
- Lesson 13.2. Depth of recursive functions
- Lesson 13.2. Mutual recursion
- Lesson 14.1. Additional exercises

Last update : 11/03/2022