Приведенная выше строка посвящена неявным интегральным преобразованиям/продвижениям в C, взятым из книги Майка БанаханаРаздел 2.8.1.1 (ссылка). Вот какой именно абзац:
C не выполняет никаких арифметических операций с точностью меньше, чем int, поэтому эти преобразования подразумеваются почти всякий раз, когда вы используете в выражении один из объектов, перечисленных ниже. Преобразование определяется следующим образом:
Всякий раз, когда короткое замыкание или символ (или битовое поле или тип перечисления, которые мы еще не встречали) применяются интегральные продвижения
- если int может содержать все значения исходного типа, то значение преобразуется в int
- иначе преобразование будет в unsigned int
Вот мои заблуждения по поводу части, выделенной жирным шрифтом. Пожалуйста, очистите это:
- Не является ли часть «иначе» избыточной? Разве все типы short или char не должны вписываться в int по умолчанию, учитывая, что int больше, чем в размер? Как вообще возникает вопрос о short, не вписывающемся в int и требующем unsigned int?
- Как действительна часть «иначе»: если отрицательное короткое целое неявно преобразуется в беззнаковое целое, не изменится ли его значение?
Хотя у меня было искушение отбросить это как тривиальное и двигаться дальше, я чувствовал, что получить правильное объяснение было бы лучше. Спасибо.