Wieso kann ich nicht einfach PORTB=PORTB|(0<<PB) setzen??
Das wird nie funktionieren wenn du ein Bit setzen willst, weil 0 ODER 0 nie 1 geben wird.

Wie heißt das für mich Laien? PORTB = PORTB & !(1<<PB1) ??
So ungefähr, nur dass ! ein einzelnes Bit negiert (also aus 0 wird 1 und umgekehrt) und ~ das gleiche aber für ein ganzes Byte macht (das nennt man komplementieren). Also heißt es PORTB = PORTB & ~(1 << PB1);
Man benutzt aber die andere Schreibweise, weil sie eben kürzer ist.

in C muss ich auch bei if == setzen (?)

Ergo: if PORTB==PORTB|(1<<PB1) wenn ich das so wörtlich eingebe, müsste es klappen?
Das müsste gehen, wenn du Klammern darum machst und statt PORTB PINB benutzt (PINB ist für den Eingang). (Ja = ist ein Zuweisungsoperator und == ist der Vergleichsoperator.)

Besser ist aber:
if(PINB & (1 << PB1))