if(PINB & ~(1<<PINB0) == 1)

muss zu:

if(PINB & (1<<PINB0) == 0)

du willst ja nur das erste bit maskieren, du hast genau dieses nicht maskiert
Und == 0, da das ja ausgeführt werden soll, wenn der Button gedrückt wird (also auf GND zieht).

Die while-Schleife ist einfach eine Endlosschleife, damit also immer wieder abgefragt wird, ob der Button gedrückt wurde oder nicht.
Ansonsten würde das Programm einmal durchlaufen und das wars (das ganze ginge so schnell das würdest du gar nicht merken).

return 0 oder return 1 ist hier egal, da dies aufgrund der while-Schleife eh nie erreicht wird...

mfg
zerush

edit:
vielleicht noch zur Erklärung
PINB & (1<<PINB0) macht folgendes:
PINB0 ist nichts anderes als 0, somit ist (1<<0) das gleiche wie 1, oder 0b00000001
wenn du also PINB & 0b00000001 machst, erhälst du 0b0000000x, wobei das x das bit0 von PINB ist...
Ich hoffe das war so verständlich