QUOTE (sigmaN @ Oct 5 2017, 11:02)

Иногда, это по настроению или как?

Иногда - это значит, что знаковость char стандартом не определена. В одном компиляторе по умолчанию он может быть знаковым, а в другом - беззнаковым. Знаковость char по умолчанию может меняться от версии к версии. Для криворуких программистов сделали возможность задавать ее ключами компилятора. Более пряморукие используют char только для хранения
символов, для
байтов используют (un)signed char. Самые правильные программисты используют char для символов, а для байтов используют uint(_fast|_least)8_t.
В данном случае без явного приведения будет предупреждение, если char вдруг окажется беззнаковым.