Спасибо, это дало мне больше ясности
пост предназначен для использования в качестве часто задаваемых вопросов, касающихся неявного целочисленного продвижения в C, особенно неявного продвижения, вызванного обычными арифметическими преобразованиями и / или целочисленными продвижениями.
Пример 1)
Почему это дает странное, большое целое число, а не 255?
unsigned char x = 0;
unsigned char y = 1;
printf("%u\n", x - y);
Пример 2)
Почему это дает «-1 больше 0»?
unsigned int a = 1;
signed int b = -2;
if(a + b > 0)
puts("-1 is larger than 0");
Пример 3)
Почему изменение типа в приведенном выше примере наshort
решить проблему?
unsigned short a = 1;
signed short b = -2;
if(a + b > 0)
puts("-1 is larger than 0"); // will not print
(Эти примеры были предназначены для 32- или 64-разрядного компьютера с 16-разрядным сокращением.)