Home c++ How the | = and & amp; = ~ operations work

# How the | = and & amp; = ~ operations work

Author

Date

Category

Help me figure out what this line does:

``````PORTX | = (1 & lt; & lt; 2);
PORTX & amp; = ~ (1 & lt; & lt; 2);
``````

Well, I really can’t understand what it is | = or & amp; = ~ …
You can explain these lines with an example ….

bit operations on Wikipedia

`PORTX | = (1 & lt; & lt; 2); `is shorthand for `PORTX = PORTX | (1 & lt; & lt; 2); `

`PORTX & amp; = ~ (1 & lt; & lt; 2); `is shorthand for `PORTX = PORTX & amp; ~ (1 & lt; & lt; 2); `

now in parts:

`& lt; & lt; `bit shift operator . shifts the bits 2 to the left of 1. In general, this is 4, that is, `(1 & lt; & lt; 2) == 4 `.

`~ `is a bitwise NOT. roughly – inverts the bits.

`| `is a bitwise OR. that is, an entry of the form `PORTX = PORTX | 4; `sets the 2nd bit of PORTX to one.

`& amp; `is a bitwise AND record of the form `PORTX & amp; 4 `“extracts” the 2nd bit from a number (that is, `PORTX & amp; 4 == 0 `when the 2nd bit is 0 and `PORTX & amp; 4! = 0 `when 2nd bit is 1)

Record of the form `PORTX & amp; ~ 4 `extracts all bits except the 2nd.

UPD: corrected about bitness. See 1 & lt; & lt; 2 is the same as 1 * 2 ^ 2 = 4. That is, in binary – 100b. Those. the second bit is set. Accordingly, it is the same with binary operations. When we apply `PORTX & amp; 4 `, then we leave the 2nd bit, and discard the rest. If we write `PORTX | 2 `then we will set the 1st bit.

P.S. in general, logically, the bits in a byte need to be numbered not from 1, but from 0. And then the post needs to be corrected again. 🙁

`| = `is a bit assignment operator “or”, similar to

``````a | = b - & gt; a = a | b
``````

~ bit inversion is an operation that changes all 0s to 1s and all 1s to 0.

& amp; = bit assignment operator “and”

``````a & amp; = b - & gt; a = a & amp; b
```
```

Why spend time searching for the correct question and then entering your answer when you can find it in a second? That's what CompuTicket is all about! Here you'll find thousands of questions and answers from hundreds of computer languages.