MicroCHIP.RU
Главная Документация Отладочные средства Справочник Поиск Ссылки
 Новости   Конференция   Контакты 
 

"развернуть" число

 Нoвaя темa  |  Наверх  |  Перейти к теме  |  Поиск  |  Правила  |  Вход 

ВНИМАНИЕ!
Вы просматриваете архив форума.

Этот форум работает только в режиме просмотра и поиска.

Действующий форум переведен на новый движок и
находится по адресу www.microchip.su

 "развернуть" число
Автор: DimaSobol ()
Дата:   08/03/2004 02:15

Расскажите, пожалуйста, как "развернуть" число на Си.
Надо 21-битное число записать "наоборот".
Т.е. 0b010100000000000000000 преобразовать в 0b000000000000000001010


 
 Re: "развернуть" число
Автор: B_A_D ()
Дата:   08/03/2004 09:51

Даю тебе подсказку:

1) Берешь исходное число А и в цикле (i = 0.. N-1 bit) двигаешь его биты вправо и
выделяешь правый бит ( B = ( A >> i) & 1);
3) Устанавливаешь в искомом числе бит с номером ( N - i) равным B .

И всего делов-то


 
 Re: "развернуть" число
Автор: B_A_D ()
Дата:   08/03/2004 10:36

А вот тебе конкретная реализация, правда наверняка можно сделать оптимальнее

 
long A =  0b010100000000000000000;
long B = 0,C;
for(i = 0; i < 21; i++)
{
   C = (A >> i) & 1;
   B |= C << (21 - i - 1);
}


В переменной B получаем перевернутое число.




 
 Re: "развернуть" число
Автор: Greg ()
Дата:   08/03/2004 11:53

пооптимальнее можно глянуть

http://www.piclist.com/techref/microchip/math/bit/revbits.htm
http://www.piclist.com/techref/method/aa0900.htm (тут в самом конце)

как и везде, размен - скорость / размер кода/ памяти


 
 Re: "развернуть" число
Автор: bogdik ()
Дата:   08/03/2004 12:15

А можно на АСМе примерно так.
clrf al
clrf am
clrf ah
movlw d'21'
movwf X
top
bcf status,c
rrf Ah
rrf Am
rrf Al
rlf al
rlf am
rlf ah
bcf status,c
decfsz X
goto top
....
....

Если где ошибся, поправьте.