Это сообщение предназначено для использования в качестве часто задаваемых вопросов о неявном целенаправленном продвижении по 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 бит.)