"%c"
ожидает int
.
(unsigned char)a[i]+100
- (unsigned char) + (int)
.Когда (unsigned char)
является 8-разрядным (наиболее распространенным), это приводит к int
.Таким образом, в обоих приведенных ниже кодовых кодах от int
до printf()
.
printf("\n %c , ((unsigned char)a[i]+100);
printf("\n %c , -11);
"%c"
преобразуется этот int
в unsigned char
.
c
... аргумент int
преобразуется в unsigned char
, и результирующий символ записывается.C11dr §7.21.6.1 8
Предполагая 8-битовое unsigned char
, это преобразованное значение находится в диапазоне от 0 до 255. -11 становится 245. Затем записывается символ.Для значений в диапазоне ASCII от 0 до 127 мы обычно видим символ ASCII или эффект управляющего символа.Другие значения печатают другие вещи.
Конечно, на платформе OP выход по умолчанию равен ?
для многих из этих символов вне диапазона ASCII. @ Пэдди