ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
25 апреля
1037676 Топик полностью
йцyкeн (18.09.2020 18:33, просмотров: 472) ответил teap0t на Раскройте мысль. Я, конечно, понимаю, что в 16-разрядный регистр 32 разряда не поместятся, и записаны будут только младшие биты. Собственно, для того и берётся максимальный размер переменной, чтобы приведение шло исключительно с обрезанием старших разрядов. Но для компилятора это разве не имеет значения? Может будет неправильная ассемблерная команда передачи использоваться (пример условный)?
На всякий случай скажу банальность: побитные логические операции на то и побитные, что разряды друг на друга не влияют. Сложение, вычитание и умножение порождают переносы, при которых младшие биты влияют на старшие, но никогда наоборот. Только деление и сдвиг вправо приводят к влиянию старших разрядов на младшие. Поэтому, если выражение не содержит деления и сдвига вправо, вычисления с "лишней" разрядностью в соответствии с правилами integer promotion не влияют на результат. 

Ассемблерная команда зависит только от разрядности переменной, стоящей в левой части присваивания: STR, STRH, STRB для 32, 16, и 8 бит соответственно.