Одна из самых жестких вещей в языке C— это неявное преобразование типов. Если вы не будете следить за этим — у вас будут большие проблемы. Попробуйте запустить этот код, чтобы узреть возможные траблы:
#include <stdio.h> int main (void) { int a = -10; unsigned int b = 5U; long int c = a + b; // signed + unsigned printf ("1) (signed int)a -10 will look as unsigned like this: %u\n", a); printf ("2) (signed)a(-10) + (unsigned)b(5) = %ld\n", c); return 0; }
Приоритеты типов:
bool char unsigned char short int unsigned short int int unsigned int long int unsigned long int long long int unsigned long long int float double long double