Also, das einfache & ist KEINE Verknüpfung von Bedingungen!!! Das wäre &&...
& ist eine bitweise VerUNDung.
Beispiel:
00110011
00011100 &
-----------
00010000

PINB sollte also 00000000 sein, wenn der Button gedrückt wird (der Pin auf GND liegt) und 00000001, wenn er nicht gedrückt ist.

Das &(1<<PINB0) sorgt also nur dafür, dass du alle Bits außer dem relevanten ignorierst.

Die Tilde invertiert dir jeweils die Bits, aus 00010010 wird also 11101101.

return 0 gibt eine 0 zurück, return 1 ne 1..
Das ist völlig egal, da die Main Funktion die oberste Funktion ist und wenn die zuende ist, ist das Programm zu Ende, der Rückgabe Wert interessiert dann nicht mehr