Jump to content

    
Sign in to follow this  
TOG

Как преобразовать число в строку на Си для ARM ?

Recommended Posts

14 hours ago, blackfin said:

Сначала нужно преобразовать int32 в BCD.

Сможете это сделать "за 2 минуты" не используя операцию деления?

Легко! Вам каким способом, таким или таким ? :)

Share this post


Link to post
Share on other sites
1 hour ago, gosha-z said:

Легко! Вам каким способом, таким или таким ? :)

ТС задал вопрос в разделе ARM, 32bit. А раз так, то можно считать, что аппаратного умножителя int64 = int32*int32 в этом ARM'е нет.

Поэтому компилятор преобразует одно умножение int32*int32 в четыре умножения int16*int16 и три сложения.

Кроме того, для вычисления остатка от деления на 10 вам понадобится ещё одно умножение на 10 и ещё одно вычитание.

Итого, для вычисления одного десятичного разряда вам понадобится 5 умножений и 4 сложения.

Не слишком то эффективный код.. :)

Меж тем, существует простой алгоритм вычисления BCD в котором используются только сравнения и вычитания.

И есть еще один простой алгоритм, в котором используются только сравнения, сложения и сдвиги.

Никаких 32-х битных умножений (или делений) для этих алгоритмов не нужно.. ;)

Share this post


Link to post
Share on other sites
1 час назад, blackfin сказал:

ТС задал вопрос в разделе ARM, 32bit. А раз так, то можно считать, что аппаратного умножителя int64 = int32*int32 в этом ARM'е нет.

По вопросу ТС-а можно понять только то, что он скорее всего вообще не знает какой у него процессор. Не знаю как Вы вычислили его процессор?  :russian_ru:

На 99% вангую "народный" STM32F103. Который вполне себе умеет i32*i32=i64.

Share this post


Link to post
Share on other sites
19 часов назад, blackfin сказал:

Для ответа на вопрос ТС этого недостаточно. Сначала нужно преобразовать int32 в BCD.

Преобразование в BCD - лишнее промежуточное преобразование.

Share this post


Link to post
Share on other sites
On 7/6/2019 at 7:39 PM, blackfin said:

Для ответа на вопрос ТС этого недостаточно. Сначала нужно преобразовать int32 в BCD.

Сможете это сделать "за 2 минуты" не используя операцию деления? ;)

Пользовал Double dabble - это для малых разрядностей (? до 32). Давно было, но множений-делений вроде нет.

Quote

It is also known as the shift-and-add-3 algorithm

 

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.

Sign in to follow this