Что я знаю - UNSIGNED INT
не может принимать отрицательные значения.
Если я беру maximum value
в качестве UNSIGNED INT
и увеличить его, я должен получить ZERO
т.е. minimum value
и если я беру minimum value
и уменьшить его, я должен получить maximum value
.
Тогда почему это происходит?
C - unsigned int going negative (-ve)
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main()
{
unsigned int ui;
ui = UINT_MAX;
ui ++;
printf("ui = %d", ui);
ui = 0;
ui --;
printf("\n");
printf("ui = %d", ui);
return EXIT_SUCCESS;
}
Выход:
ui = 0
ui = -1
его из-за переполнения int – sashas
'% d'? не должно быть '% u'? – WhozCraig
Я должен прочитать спецификацию, но IIRC либо переполнение, либо недополнение, скорее всего, [* неопределенное поведение *] (http://en.wikipedia.org/wiki/Undefined_behavior). –