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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Операция с битами 3 бинарных чисел.
zheka
сообщение Dec 10 2009, 10:34
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Коллеги, подскажите наиболее рациональный в плане быстродействия способ решения задачи в CodeVision:
Есть такакя шняжка

const unsigned char LINE[] ={0b0000001,0b00000001,0b00000001};

А еще есть 0,1 и 2 линии порта A. Необходимо за 8 циклов передать содержимое LINE побитно - 0-й элемент в 0-ю линию, 1-й элемент в 1-ю линии, побитно - значит, за первый цикл, первый бит элементов массива и так далее..
Спасибо.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Dec 10 2009, 10:49
Сообщение #2


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Ну, раз это константы, заведите другие 8 констант и выдавайте их в цикле, в чём проблема?


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
zheka
сообщение Dec 10 2009, 11:04
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Это пока константы, потому как данные мне пока получать неоткуда.

мне бы для начала - как узнать значение определенного бита в переменной?
Go to the top of the page
 
+Quote Post
=GM=
сообщение Dec 10 2009, 11:04
Сообщение #4


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(zheka @ Dec 10 2009, 10:54) *
Это пока константы, потому как данные мне пока получать неоткуда

Тогда не надо писать const в постановке задачи.

Приведите ваше неоптимальное решение вашей задачи.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
zheka
сообщение Dec 10 2009, 12:23
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Ну хорошо, если с const вам непонятно, если так понятнее то:
unsigned char d1,d2,d3;

-----

d1=0b00000001;
d2=0b00000010;
d3=0b00000011;

СЛишком сложно для вас, тогда ответьте на вопрос - как вычислить значение определенног бита в числе, остальное я сам доделаю.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Dec 10 2009, 12:33
Сообщение #6


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



byte=byte>>1;
bit=byte&0x01;


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 10 2009, 12:35
Сообщение #7


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(zheka @ Dec 10 2009, 16:23) *
СЛишком сложно для вас, тогда ответьте на вопрос - как вычислить значение определенног бита в числе, остальное я сам доделаю.

Код
void bit_out(char b0,b1,b2)
{
char jj;
for(jj=0;jj<8;jj++)
{
   char tmp = 0;
   if(b0 & 1) tmp |= 0x01;
   if(b1 & 1) tmp |= 0x02;
   if(b2 & 1) tmp |= 0x04;
   PORTA = (PORTA & 0xf8) | tmp;
  b0 >>= 1;
  b1 >>= 1;
b2 >>= 1;
}
}

И не хами(те) тута - и так сплошная [censored] smile.gif
Go to the top of the page
 
+Quote Post
zheka
сообщение Dec 10 2009, 13:28
Сообщение #8


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Спасибо, что-то вроде этого я и ожидал увидеть. Хамить никому не собирался.

Сообщение отредактировал zheka - Dec 10 2009, 13:34
Go to the top of the page
 
+Quote Post
zheka
сообщение Dec 10 2009, 18:10
Сообщение #9


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



В общем ТЗ окончательно сформировалось и выглядит несколько по-иному.
Задача следующая:
имеется 7 бит: yyyxxxx , из которых 3мя (yyy )нужно управлять, а 4 (xxxx) не трогать
есть число из 8 бит типа aaaaaaaa.
нужно взять 3 младшие бита и поместить их на место yyy, при этом не тронув биты xxxx. Чтоы получилось в итоге aaaxxxx

Сообщение отредактировал zheka - Dec 10 2009, 18:12
Go to the top of the page
 
+Quote Post
IJAR
сообщение Dec 10 2009, 19:31
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 26-02-07
Из: г. Зеленоград
Пользователь №: 25 669



Цитата(zheka @ Dec 10 2009, 21:10) *
В общем ТЗ окончательно сформировалось и выглядит несколько по-иному.
Задача следующая:
имеется 7 бит: yyyxxxx , из которых 3мя (yyy )нужно управлять, а 4 (xxxx) не трогать
есть число из 8 бит типа aaaaaaaa.
нужно взять 3 младшие бита и поместить их на место yyy, при этом не тронув биты xxxx. Чтоы получилось в итоге aaaxxxx


Попробую сформулировать конкренее:
Дано:
байт A=z7 y6 y5 y4 x3 x2 x1 x0
и бай B=a7 a6 a5 a4 a3 a2 a1 a0
где a, x, y, z могут принимать значения 0 или 1
(цифра справа от символа означает позицию бита в байте)

Требуется:
сформировать байт C следующего вида: C=Z7 a6 a5 a4 x3 x2 x1 x0

Вам это требуется?


--------------------
Вяжешь - вой, а поедешь - песни пой.
Между "хочу" и "можно" всегда есть дистанция
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Dec 10 2009, 19:58
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(IJAR @ Dec 10 2009, 23:31) *
Попробую сформулировать конкренее:
Дано:
байт A=z7 y6 y5 y4 x3 x2 x1 x0
и бай B=a7 a6 a5 a4 a3 a2 a1 a0
где a, x, y, z могут принимать значения 0 или 1
(цифра справа от символа означает позицию бита в байте)

Требуется:
сформировать байт C следующего вида: C=Z7 a6 a5 a4 x3 x2 x1 x0

Вам это требуется?

Что-то я не пойму. А что так не проходит?

c = (a & 0x8f)|(b & 0x70);
Go to the top of the page
 
+Quote Post
IJAR
сообщение Dec 10 2009, 20:07
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 26-02-07
Из: г. Зеленоград
Пользователь №: 25 669



Цитата(SasaVitebsk @ Dec 10 2009, 22:58) *
Что-то я не пойму. А что так не проходит?

c = (a & 0x8f)|(b & 0x70);


Я сам тоже не могу понять, а может ему надо
C=z7 a2 a1 a0 x3 x2 x1 x0
или
C=z7 a0 a5 a2 x1 x0 x2 x3
......
вариантов то много......

Нам бы схемку аль чертеж -мы б затеяли вертеж,
Ну а так - ищи что хочешь
Черта лысого найдешь.


--------------------
Вяжешь - вой, а поедешь - песни пой.
Между "хочу" и "можно" всегда есть дистанция
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Dec 10 2009, 20:58
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Сделай то, не знаю что. Автору каждый день будут ТЗ менять, а он у нас тут переспрашивать? Сам то автор понимает, про что спрашивает?
Go to the top of the page
 
+Quote Post
des333
сообщение Dec 10 2009, 21:28
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Цитата(IJAR @ Dec 10 2009, 22:31) *
Попробую сформулировать конкренее:
Дано:
байт A=z7 y6 y5 y4 x3 x2 x1 x0
и бай B=a7 a6 a5 a4 a3 a2 a1 a0
где a, x, y, z могут принимать значения 0 или 1
(цифра справа от символа означает позицию бита в байте)

Требуется:
сформировать байт C следующего вида: C=Z7 a6 a5 a4 x3 x2 x1 x0

Вам это требуется?

Я думаю, раз автор просил взять младшие 3 бита, то нужно ему получить:

C=Z7 a2 a1 a0 x3 x2 x1 x0

Цитата(SasaVitebsk @ Dec 10 2009, 22:58) *
Что-то я не пойму. А что так не проходит?

c = (a & 0x8f)|(b & 0x70);



Учитывая вышесказанное, наверное, так:

Код
a = (a & 0x8f) | ( (b & 0x07) << 4);


Сообщение отредактировал des333 - Dec 10 2009, 21:32


--------------------
Go to the top of the page
 
+Quote Post
zheka
сообщение Dec 11 2009, 09:26
Сообщение #15


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



1. Автор прекрасно понимает чего хочет.
2. У автора получилось вот так PORTA = (PORTA & 0xF) | (LINE[jj]<<4) ;

А посоветуйте где накопать информации и примеров по битовым хитростям. То есть я в принципе знаю что дают операции &| << >>, но вот практическое их применение типа - вычислить значение бита №n, расположить биты в обратном порядке, заменить биты там-то и там-то...

Сообщение отредактировал zheka - Dec 11 2009, 09:26
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 19:05
Рейтинг@Mail.ru


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