Когда вы приводите тип из int в char, вы сокращаете количество используемых байтов с 4 до 1. Как он выбирает, какой байт он собирается использовать для создания char?
Требуется ли старший байт?
Или берет наименее значимый?
Или есть какое-то правило, о котором я должен знать?
Ответ 1 · рейтинг 5 · templatetypedef
C будет брать младший байт при выполнении сужающего преобразования, поэтому, если у вас есть целочисленное значение 0xCAFEBABE и вы конвертируете его в char, вы получите значение 0xBE.
Конечно, нет реальной гарантии, что int - это четыре байта или что char - это один, но я почти уверен, что логика выполнения усечения всегда будет одинаковой и просто отбросит старшие биты, которые не нужны. не вписывается в char.
Ответ 2 · рейтинг 2 · R.. GitHub STOP HELPING ICE
Если char подписано, оно определяется реализацией, если исходное значение уже не соответствует диапазону значений для char. Реализация совершенно свободна генерировать чепуху (или поднимать сигнал), если она не подходит. Если char не имеет знака (что разрешено стандартом), то значение уменьшается по модулю 1<<CHAR_BIT (обычно 256).