mdmitry 0 21 ноября, 2020 Опубликовано 21 ноября, 2020 · Жалоба 2 hours ago, Bpovov said: Вот такая штука к примеру, в кейле даже на кортекс М работает верно, без залезания в асм int A, B; long C; А = B*C; при условии что результат и значения операндов не вылезают за int Стоит ещё посмотреть limits.h. А в нем не окажется ли, что INT_MAX==LONG_MAX и в 32 бита? (sizeof(int) <= sizeof(long)). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 21 ноября, 2020 Опубликовано 21 ноября, 2020 · Жалоба У Cortex int размер имеет 32 бита, а у AVR int размер 16 бит. Используйте stdint.h и типы uint8_t, int8_t, uint16_t, int16_t и т.д. и ваш код станет более переносимым. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bpovov 0 24 ноября, 2020 Опубликовано 24 ноября, 2020 (изменено) · Жалоба 21.11.2020 в 18:49, dimka76 сказал: У Cortex int размер имеет 32 бита, а у AVR int размер 16 бит. Все верно, но long по длине также больше int, как и в AVR. 21.11.2020 в 18:49, dimka76 сказал: Используйте stdint.h и типы uint8_t, int8_t, uint16_t, int16_t и т.д. и ваш код станет более переносимым. Дело не в переносимости, она в моем случае не нужна. 21.11.2020 в 18:10, mdmitry сказал: Стоит ещё посмотреть limits.h. А в нем не окажется ли, что INT_MAX==LONG_MAX и в 32 бита? (sizeof(int) <= sizeof(long)). Я смотрел ассемблер этих выражений, там все четко. Изменено 24 ноября, 2020 пользователем Bpovov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 121 24 ноября, 2020 Опубликовано 24 ноября, 2020 · Жалоба 6 минут назад, Bpovov сказал: Все верно, но long по длине также больше int, как и в AVR. у ARM long - 4 байта, int - 4 байта. Где "больше"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться