Jump to content

    
Bpovov

Преобразование знаковых типов

Recommended Posts

2 hours ago, Bpovov said:

Вот такая штука к примеру, в кейле даже на кортекс М работает верно, без залезания в асм

int A, B;

long C;

А = B*C;  при условии что результат и значения операндов не вылезают за int

 

Стоит ещё посмотреть limits.h. А в нем не окажется ли, что INT_MAX==LONG_MAX и в 32 бита? (sizeof(int) <= sizeof(long)).

Share this post


Link to post
Share on other sites
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)).

Я смотрел ассемблер этих выражений, там все четко.

Edited by Bpovov

Share this post


Link to post
Share on other sites
6 минут назад, Bpovov сказал:

Все верно, но long по длине также больше int, как и в AVR.

у ARM long - 4 байта, int - 4 байта. Где "больше"?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.