почему так?
Потому что есть signed int и unsigned int. У первого диапазон -32767 - 32767, у второго 0 - 65535. Обычно это особого значения не имеет, если только специально внимание на этом не заострять. Но тем не менее об этом надо помнить.
По умолчанию - signed int. То есть:
int a; // -32767 - 32767
unsigned int b; // 0 - 65535