Nur eine Ergänzung zu Ericksons Antwort:
Wie er sagte, werden vorzeichenbehaftete Ganzzahlen auf den meisten Computerarchitekturen als Zweierkomplement zu ihrem jeweiligen positiven Wert gespeichert.
Das heißt, die gesamten 2^32 möglichen Werte werden in zwei Sätze aufgeteilt: einen für positive Werte, die mit einem 0-Bit beginnen, und einen für negative Werte, die mit einer 1 beginnen.
Stellen Sie sich nun vor, wir sind auf 3-Bit-Zahlen beschränkt. Lassen Sie sie auf eine lustige Weise anordnen, die gleich Sinn machen wird:
000
111 001
110 010
101 011
100
Sie sehen, dass alle Zahlen auf der linken Seite mit einem 1-Bit beginnen, während sie auf der rechten Seite mit einer 0 beginnen. Durch unsere frühere Entscheidung, die erstere als negativ und die letztere als positiv zu erklären, sehen wir, dass 001, 010 und 011 die einzigen möglichen positiven Zahlen sind, während 111, 110 und 101 ihre entsprechenden negativen Gegenstücke sind.
Was machen wir jetzt mit den beiden Zahlen oben und unten? 000 sollte offensichtlich null sein und 100 wird die niedrigste negative Zahl von allen sein, die keine positive Entsprechung hat. Zusammengefasst:
000 (0)
111 001 (-1 / 1)
110 010 (-2 / 2)
101 011 (-3 / 3)
100 (-4)
Sie werden vielleicht feststellen, dass Sie das Bitmuster von -1 (111) bekommen, indem Sie 1 (001) negieren und 1 (001) hinzufügen: 001 (= 1) -> 110 + 001 -> 111 (= -1)
Zurück zu Ihrer Frage:
0xff000000 = 1111 1111 0000 0000 0000 0000 0000 0000
Wir müssen keine weiteren Nullen davor hinzufügen, da wir bereits das Maximum von 32 Bits erreicht haben. Außerdem ist es offensichtlich eine negative Zahl (da sie mit einem 1-Bit beginnt), also werden wir nun ihren absoluten Wert / positiven Gegenpart berechnen:
Dies bedeutet, wir nehmen das Zweierkomplement von
1111 1111 0000 0000 0000 0000 0000 0000
welches ist
0000 0000 1111 1111 1111 1111 1111 1111
Dann addieren wir
0000 0000 0000 0000 0000 0000 0000 0001
und erhalten
0000 0001 0000 0000 0000 0000 0000 0000 = 16777216
Also ist 0xff000000 = -16777216.