реклама на сайте
подробности

 
 
> Побитовое копирование переменной
jekler
сообщение Aug 13 2006, 19:25
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 30-08-05
Пользователь №: 8 094



Приветствую.

Написал свой маленький протокол передачи команд.
теперь нужно передавать постоянно меняющуюся переменную.
передать её не проблема, а проблема грамотно разложить по битам. ниже привожу код со сдвигом битов.
код подсмотрел и переделал для реализации внутри одного устройства из протокола передачи i2c, но ничего не понял как работает. что-то куда-то сдвигается. пробовал по разному, но увы

вот код:
Код
CodeVision:

unsigned char mask=0x80;

if(dled<8)
      {
       if(cifra&0x80)
       {
        cifra1=cifra1+mask;
       }
       cifra<<=1;
       cifra1>>=1;
      
      }


имеется переменная cifra с каким-либо значением. требуется побитово перекопировать её в cifra1. Подскажите как это правильно будет выглядеть? и как сдвиг работает поясните, если не сложно.
Заранее спасибо!


--------------------
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
rezident
сообщение Aug 13 2006, 22:40
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Не совсем понял, а в каком порядке биты во второй переменной должны располагаться? Если в таком же как и в первой, то я бы написал так (с учетом того, чтобы не портить исходную переменную):
Код
unsigned tmp=8, mask=0x80;
while(tmp>0)
{ if((cifra&mask)!=0)
   { cifra1|=mask;
   }
   else
   { cifra1&=~mask;
   }
   mask>>=1;
   tmp--;
}

Насчет сдвига в СИ читайте учебник по СИ. И не потому, что я не могу или не хочу объяснить, а потому, что самостоятельный поиск и результат самостоятельного прочтения лучше способствует восприятию и запоминанию. ИМХО.
Go to the top of the page
 
+Quote Post
jekler
сообщение Aug 13 2006, 22:46
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 30-08-05
Пользователь №: 8 094



Спасибо smile.gif
уже разобрался smile.gif


--------------------
Go to the top of the page
 
+Quote Post
defunct
сообщение Aug 15 2006, 20:31
Сообщение #4


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



rezident
А tmp там зачем?

while (mask)
...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 23:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01356 секунд с 7
ELECTRONIX ©2004-2016