im for-Schleife
für (unsigned int i = 50; i> = 0; i--) printf ("i =% d \ n", i);
der Wert von i
decresed von 1, und wenn Ihr Wert i==0
dann versuchen Schleife Abnahme i--
bedeutet i=-1
Die zuweisen -1 rechts von Ihrem Gleichheitszeichen als 'Signed Integer eingerichtet ist (wahrscheinlich 32 Bits groß) und haben den hexadezimalen Wert 0xFFFFFFF4. Der Compiler generiert Code zum Verschieben dieser vorzeichenbehafteten Ganzzahl in Ihre vorzeichenlose Ganzzahl i
, die ebenfalls eine 32-Bit-Entität ist. Der Compiler nimmt an, dass Sie nur einen positiven Wert rechts vom Gleichheitszeichen haben, also verschiebt es einfach alle 32 Bits in i
. i
hat jetzt den Wert 0xFFFFFFF4, der 4294967284 ist, wenn er als eine positive Zahl interpretiert wird. Aber das printf-Format von% d besagt, dass die 32 Bits als eine vorzeichenbehaftete Ganzzahl interpretiert werden müssen, so dass Sie -1 erhalten. Wenn Sie% verwendet hatten u hätte es als 4294967284. gedruckt
aber printf gibt einen negativen Wert – bricklore
@ MalteSchmitz Nicht in C# –
@DrC ah sh * t vergaß das Ding mit dem '% ud' .. :) danke – bricklore