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 ….


Answer 1, authority 100%

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. 🙁


Answer 2, authority 53%

| = 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

Programmers, Start Your Engines!

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.

Recent questions