Одна из самых неприятных вещей в языке C— это неявное преобразование типов. Если вы не будете следить за этим — у вас будут большие проблемы. Попробуйте запустить этот код, чтобы узреть возможные траблы:
#include <stdio.h> int main (void) { int x = -100; printf ("signed int -100 will look as unsigned like this: %u\n", x); unsigned int y = 10U; long long int z = x + y; // when we have singned and unsigned // C transfer signed to unsigned by default // so -100 will become 4294967196 printf ("x + y = %lld\n", z); char c = 'Я'; // char is !signed! integer by default printf ("<R> as integer = %d\n", c); int d = (int)c * 10; printf("d = %d\n", d); getchar(); }