W twojej do pętli
dla (unsigned int i = 50; i> = 0; ja--) printf ("I =% d \ n" l);
wartość i
decresed przez 1 a gdy wartość i==0
następnie pętla ubytek próby przypisania i--
oznacza i=-1
-1 po prawej swoimi znak równości jest ustawiona jako liczba całkowita ze znakiem (prawdopodobnie 32 bity) i będą miały szesnastkową wartość 0xFFFFFFF4. Kompilator generuje kod, aby przenieść tę podpisaną liczbę całkowitą do niepodpisanej liczby całkowitej i
, która jest również encją 32-bitową. Kompilator zakłada, że masz tylko dodatnią wartość po prawej stronie znaku równości, więc po prostu przenosi wszystkie 32 bity do i
. i
ma teraz wartość 0xFFFFFFF4, która wynosi 4294967284, jeśli zostanie zinterpretowana jako liczba dodatnia. Ale format printf% d mówi, że 32 bity mają być interpretowane jako liczba całkowita ze znakiem, więc otrzymasz -1. Jeśli użył% u byłoby drukowane jako 4294967284.
ale printf wyprowadza wartość ujemną – bricklore
@ MalteSchmitz Nie w C# –
@DrC ah sh * t zapomniałem tego z '% ud' .. :) dzięki – bricklore