Gerome Muent wrote:
> Am 20.08.2015 um 21:39 schrieb Olaf Schmitt:
>> Steht da drin
Wo?
>> int(3) mit dem Wert 2, dann gibt das 002
>> int(5) mit dem Wert 12, dann gibt das 00012
>>
>> Stichwort ZEROFILL
Irrelevant. ZEROFILL ist *optional*.
> Danke.
> So war mir das nicht klar. Jetzt verstehe ich "int(10)".
… immer noch nicht. Denn ZEROFILL hat damit sehr wenig zu tun. Sondern:
2⁰ = 1
2¹ = 2
2² = 2 × 2 = 4
2³ = 4 × 2 = 8
2⁴ = 8 × 2 = 16
…
2³² − 1 = 4'294'967'295 (ca. 4.3 _Milliarden_)
`-----.,----'
10 Stellen
2³² − 1 ist deshalb der Maximalwert, weil mit 32 Bits zwar 2³²
unterschiedliche Werte gespeichert werden können, einer dieser
Werte aber 0 ist.
Mit
2³³ − 1 = 8'589'934'591
bliebe man auch noch innerhalb der 10 angezeigten Dezimalstellen vor dem
Komma, aber man benötigte dafür mehr als 32 Bits, also mehr als die für den
Datentyp INT zur Verfügung stehenden 4 (8-Bit-)Bytes (4 × 8 = 32).
Ohne UNSIGNED reduziert sich der Maximalwert nochmals auf eins weniger als
die Hälfte von (hier) 2³², weil das höchstwertige Bit (MSB; hier das 32.,
von rechts gezählt) als Vorzeichenbit dient: Ist es gesetzt (1), so ist,
einfach formuliert die mit den übrigen Bits angegebene Zahl negativ,
andernfalls (0) positiv.
Da ich keinen Sinn in negativen IDs sehe, rate ich dazu, dafür immer
UNSIGNED zu verwenden.