Виж темите без отговор | Виж активните теми
Дата и час: Пет Мар 29, 2024 3:30 am
Автор |
Съобщение |
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4577 Местоположение: Новата земя на племето Мутум'ба
|
размяна на битове
Нещо съм блокирал май... Има ли елегантен начин за размяна само на битове 7<->8, 6<->9, 5<->11, 4<->12, без да се закачат останалите, в един unsigned int? Сигурен съм че има, ама в момента ми убягва.
_________________ 'просто' е технически синоним на 'красиво'
|
Нед Ное 22, 2015 1:14 pm |
|
|
DanielDimov
Ранг: Почетен член
Регистриран на: Нед Фев 16, 2014 2:36 pm Мнения: 953
|
Re: размяна на битове
с таблица ще стане най-лесно и най-бързо
|
Нед Ное 22, 2015 1:43 pm |
|
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 5:52 pm Мнения: 10356 Местоположение: Добрич
|
Re: размяна на битове
За много платформи има инструкции за byte order (REV) и bit order (RBIT), доколкото схващам ти трябват и двете, т.е.
unsigned int foo(unsigned int x) { return __RBIT(__REV16(x))>>16; }
евентуално foo може да е inline и ако компилираш с Ц++ може да е constexpr.
|
Нед Ное 22, 2015 2:31 pm |
|
|
palavrov
Ранг: Форумен бог
Регистриран на: Вто Окт 11, 2011 10:53 pm Мнения: 4174 Местоположение: Brussels / Пловдив
|
Re: размяна на битове
Те всъщност са 8 бита - просто трябва първо да >>4 после обръщаш битовете в целия байт и накрая <<4. Обръщането според архитектурата - ако има CPU инструкция добре, ако не с таблица.
_________________ Мразя да мразя ...
|
Нед Ное 22, 2015 4:23 pm |
|
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 5:52 pm Мнения: 10356 Местоположение: Добрич
|
Re: размяна на битове
Верно ли само изброените битове? Че и с дупка Значи нещо от сорта:
|
Нед Ное 22, 2015 6:17 pm |
|
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4577 Местоположение: Новата земя на племето Мутум'ба
|
Re: размяна на битове
Всъщност размяната даже е малко по сложна отколкото я описах В едната посока е 4->7, 5->8, 6->9, 7->10 В другата е 7->11, 6->10, 5->9, 4->8 След приличен обяд успях да вържа някакъв код, ама тепърва ще го пробвам... (k[r] ми е 16-битовото число) като xb[] табличката е | | | | Код: const unsigned char xb[16] = {0b0000, 0b1000, 0b0100, 0b1100, 0b0010, 0b1010, 0b0110, 0b1110, 0b0001, 0b1001, 0b0101, 0b1101, 0b0011, 0b1011, 0b0111, 0b1111};
| | | | |
_________________ 'просто' е технически синоним на 'красиво'
|
Нед Ное 22, 2015 7:46 pm |
|
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 5:52 pm Мнения: 10356 Местоположение: Добрич
|
Re: размяна на битове
Е не е по-сложно... това за каква платформа е? Питам щото ако е arm както си го написал е супер неефективно
|
Нед Ное 22, 2015 8:12 pm |
|
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4577 Местоположение: Новата земя на племето Мутум'ба
|
Re: размяна на битове
Arm?? Тва пък какво е? (подразбира се че не е...) Виж сега, аз не се смятам за велик програматор. Моята философия е по-обща. Ако си в настроение да ми подобриш кода, ще ти благодаря (между псувните че не съм се сетил сам )
_________________ 'просто' е технически синоним на 'красиво'
|
Нед Ное 22, 2015 8:24 pm |
|
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 5:52 pm Мнения: 10356 Местоположение: Добрич
|
Re: размяна на битове
За съжаление кристалното ми кълбо се повреди и няма как да разбера какъв тип архитектура и какъв компилатор ползваш.
|
Нед Ное 22, 2015 9:04 pm |
|
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4577 Местоположение: Новата земя на племето Мутум'ба
|
Re: размяна на битове
Ми да беше споменал. Аз съм зарит от кристални кълба дето не ги ползвам. Пик16 ми е архитектурата за това и ХС8 компилатор
_________________ 'просто' е технически синоним на 'красиво'
|
Нед Ное 22, 2015 9:14 pm |
|
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 5:52 pm Мнения: 10356 Местоположение: Добрич
|
Re: размяна на битове
Ти направо ме закопа... не съм ги чувал тия Единственото дето знам е че май са 8-бит... Компилаторът пък хептен нищо не ми говори, все пак ако е добър в оптимизациите може би не трябва да му се пречкаш с междинни променливи. Пробвай с един голям израз директно да му дадеш резултата пък той да си преценява т.е. нещо от сорта: k[r]=(k[r] & 0xf00f) | ((k[r] & 0xf0) << 4 ) | ((unsigned int)xb[(k[r]>>8) & 0xf] << 4); Просто виж какъв асемблер генерира и прецени. Ак о с общия израз e добре, може да го подобриш още като преместиш последния шифт от кода в таблицата. Тя нали е 8 битова, т.е. да шифтнеш стойностите й.
|
Нед Ное 22, 2015 10:51 pm |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4671
|
Re: размяна на битове
/*------------------------------------------------------------------------- * Some useful macros for inline assembly stuff *-------------------------------------------------------------------------*/ #define Nop() {_asm nop _endasm} #define ClrWdt() {_asm clrwdt _endasm} #define Sleep() {_asm sleep _endasm} #define Reset() {_asm reset _endasm}
#define Rlcf(f,dest,access) {_asm movlb f rlcf f,dest,access _endasm} #define Rlncf(f,dest,access) {_asm movlb f rlncf f,dest,access _endasm} #define Rrcf(f,dest,access) {_asm movlb f rrcf f,dest,access _endasm} #define Rrncf(f,dest,access) {_asm movlb f rrncf f,dest,access _endasm} #define Swapf(f,dest,access) {_asm movlb f swapf f,dest,access _endasm }
виж какво прави последния ред
_________________ main[-1u]={1};
|
Пон Ное 23, 2015 7:08 am |
|
|
CarBeta
Ранг: Форумен бог
Регистриран на: Пет Май 01, 2009 3:01 pm Мнения: 1438
|
Re: размяна на битове
Последния ред, а и предните 4, са за пик18. Човека търси решение за пик16. @Н'бабане, ако те устройва на асемблер мога да бутна едно рамо
|
Пон Ное 23, 2015 8:59 am |
|
|
bobihot
Ранг: Форумен бог
Регистриран на: Сря Фев 13, 2013 2:35 pm Мнения: 1748
|
Re: размяна на битове
Повечето МП архитектури имат инструкция за размени тетрадите в байта. Та май такава ти трябва. SWAP в x51. При пиковете-ненам.
|
Пон Ное 23, 2015 11:27 am |
|
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4577 Местоположение: Новата земя на племето Мутум'ба
|
Re: размяна на битове
@CarBeta, мерси настина, но няма да ми трябва асемблер. Всъщност аз съм го загърбил от години вече и винаги гледам да мина по най-правата крива В общи линии това което съм сътворил ми върши работа, оттук нататък всички оптимизации ще са единствено за спорта.
_________________ 'просто' е технически синоним на 'красиво'
|
Пон Ное 23, 2015 11:53 am |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 1 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|