Prawdopodobnie zależy to trochę od kompilatora. Miałem błędy takie jak te lata temu, a czasami dostałeś błąd runtime, innym razem w zasadzie "zawijał" z powrotem do naprawdę małej liczby, która byłaby wynikiem odcięcia bitów najwyższego poziomu i pozostawiania reszty, tj. Jeśli jest 32 bit unsigned int, a wynikiem twojego mnożenia byłaby liczba 34-bitowa, odetnę 2-bitowe najwyższe wartości i dostaniesz resztę. Prawdopodobnie musiałbyś wypróbować to na swoim kompilatorze, aby zobaczyć dokładnie, co otrzymujesz, co może nie być tym samym, co otrzymasz za pomocą innego kompilatora, zwłaszcza jeśli przepełnienie występuje w środku wyrażenia, w którym wynik końcowy jest w obrębie zakres unsigned int.
To wydaje się być duplikatem http://stackoverflow.com/questions/199333/best-way-to-detect-integer-overflow-in-c-c-c –
Dlaczego nie spróbować i zobaczyć, co otrzymasz? Ogólnie rzecz biorąc, gdy niepodpisana liczba int przepełni się, przechodzi do zera. Tak więc 'UINT_MAX + 5' przewraca się i staje się 4. –
Byłaby to różnica między maksymalną wartością uint a wartością, która byłaby wartością przepełnienia. Pozwala to uprościć. Powiedzmy, że max uint ma wartość 5. Chcesz dodać 2 * 4, więc ta wartość końcowa 3 zamiast 8. –