Компилятор C должен расширить передаваемое значение до printf
(это называется "продвижение"), потому что printf
- это функция с переменным числом аргументов (ее можно вызывать с разными аргументами).Для значений типа char
повышенное значение имеет тип int
.Поскольку тип вашего компилятора char
кажется подписанным, повышенное значение является расширенным знаком.В двоичном виде:
char i = 255 // or: 11111111 in binary
int promoted_i = -1 // or: 11....11111 (usually, 32 or 64 ones)
В случае без знака расширение знака не происходит:
char u = 255 // or: 11111111 in binary, same as above but with different interpretation
unsigned int pu = i // or: 00....0011111111 (8 ones, preceded by the appropriate number of zeroes)