Matthias W. schrieb:
> Heist das, dass die Zahl den Wert 1 hat, aber der Typ
> ein unsigned long ist?
Genau. Ohne Typangabe sind Konstanten vom Typ int. Das kann in manchen
Rechenoperationen einen Unterschied machen.
Beispiel: Auf einem AVR ist ein int 16 Bit breit, ein long 32 Bit.
1 ist 0b0000000000000001
1 << 15 ist 0b1000000000000000
1 << 16 ist 0b0000000000000000
~1 ist 0b1111111111111110
1UL ist 0b00000000000000000000000000000001
1UL << 15 ist 0b00000000000000001000000000000000
1UL << 16 ist 0b00000000000000010000000000000000
~1 ist 0b11111111111111111111111111111110
Wenn man also sicher gehen möchte, dass bei solchen Berechnungen die
vollen 32 Bit genutzt werden, nimmt man 1UL. In der Praxis würde bei
einem STM32 auch einfach 1 reichen, da ein int auf der Plattform 32 Bit
breit ist. Es ist aber sauberer, wenn man darüber im Code keine Annahmen
macht und explizit 1UL schreibt, wenn man 32 Bit braucht.