Ok, ich versuch mal es zu erklären...

Die 1, also binär 00000001, wird mit dem Linksshift-Operator um j Stellen nach links geschoben. (es wird quasi das Bit "j" gesetzt)
Das resultierende Bitmuster wird anschließend und-verknüpft mit Port.

d.h. der gesamte Ausdruck liefert 0, wenn Bit-j in Port nicht gesetzt ist und sonst eben eine Zahl ungleich 0.


Hier mal zwei Rechenbeispiele:

Code:
j = 5
=> (1 << j) = 00100000

Port = 11010010
(Port & (1 << j)):

  11010010
& 00100000
----------
= 00000000 = 0



j = 6
=> (1 << j) = 01000000

Port = 01110100
(Port & (1 << j)):

  01110100
& 01000000
----------
= 01000000 = 64