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