Отрицательные значения типа signed char в С
Есть такой тип Signed Char. Он имеет диапазон -127...127. Если Char это символ, то как символ может быть отрицательным? И в каком случае принципиально использовать signed а в каком unsigned char?
Вот например есть код функции сравнивающей 2 строки:
int ft_strncmp(const char *s1, const char *s2, size_t n)
{
size_t i;
i = 0;
if (n == 0)
return (0);
while ((i < n) && (s1[i] || s2[i]))
{
if (s1[i] != s2[i])
return (((unsigned char)s1[i] - (unsigned char)s2[i]));
/*Почему здесь используется приведение к типу unsigned char? */
i++;
}
return (0);
}
Ответы (2 шт):
Char это целочисленный тип данных, с установленным размером в 1 байт(всегда в яп С/С++). В СИ в данном случае этот тип данных может использоваться для хранения кода символа. Данный код определяется таблицей кодировки

Так вот данный код может быть любым численным значение.
PS char(знаковый) это от -128 до 127
PSS вы можете проверить код символа примерно так:
int main(){
char a = 'A';
printf("symbol is %c and code of symb = %d",a,a);
}
Чтобы было понятнее, выполните вот такой простенький код:
for(unsigned int uc = 0;;uc++)
{
printf("%3i %c %3i\n", uc, (char)uc, (signed char)uc);
if (uc == 0xFF) break;
}
Видите? Это три разных представления одного и того же содержимого байта в памяти. Весь вопрос просто в том, как он трактуется.