Code um einen Takt auszugeben

long und int sind kompatibel. Der führt da implizierte Konversionen durch. Solange du das Ergebnis wieder in einen long schreibst passt alles. Wenn nicht würde der Compiler meckern und du weißt was los ist. Überlaufe zur Runtime kann er natürlich nicht feststellen und das war dein Problem.

Der Widerstand ist dazu da um einen definierten Pegel zu bekommen und den Strom zu begrenzen. Sonst hängt er eventuell in der Luft. Das ist so ne Sache. Die meisten Mikrokontroller haben interne Pullups. Die sind aber auch schaltbar (und nicht unbedingt automatisch ein) und manche Pins haben je nach Controller keine, da sie noch andere Funktionen haben (z.B. DAC). Also sicher ist sicher.

Du hängt den Eingang normalerweise mit dem Widerstand gegen Plus und den anderen Kontakt des Tasters gegen Masse. Dann liegt normal Plus an und wenn der Taster gedrückt wird Masse. Es geht aber auch anders herum mit Pull-Downs.

Hier ist die Pull-Down Version:

Wurde da wohl gewählt, da man dann im gedrückten Zustand HIGH hat, was vielleicht etwas logischer ist wenn man das nicht gewöhnt ist.

Hier ist das mit den Internen Pullups erklärt: