Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с битовой операцией. 
:(
    Опции темы
=Женек=
Дата 10.12.2009, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: нет
Всего: 1



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


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



ТЗ на лабу?:)

Код

int main(){
int x=0x12345678;//src
int a=0x0xFEDCBA98;//some 8 bit
int mask=0xFFFF;//stored bits
printf("%X\n",x&mask|a&~mask);
return 0;
}



--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
=Женек=
Дата 10.12.2009, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: нет
Всего: 1



Нет, собственный проект. И делать надо проще и универсальнее, так как работать должно на AVR контроллре.
Уже дошел сам - вот   PORTA = (PORTA & 0x8F) | (LINE[jj]<<4) ;    
PM MAIL   Вверх
mes
Дата 10.12.2009, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(djamshud @  10.12.2009,  20:41 Найти цитируемый пост)
int x=0x12345678;//src
int a=0x0xFEDCBA98;//some 8 bit
int mask=0xFFFF;//stored bits

а биты с байтами не перепутали ? smile хотя даже в этом случае не нахожу общего с заданием...  smile 

Это сообщение отредактировал(а) mes - 10.12.2009, 22:06


--------------------
PM MAIL WWW   Вверх
djamshud
Дата 10.12.2009, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



>а биты с байтами не перепутали ?

Упс, точно.)

>хотя даже в этом случае не нахожу общего с заданием...

 "x&mask|a&~mask" переставляет биты по заданию. Нужно просто правильно задать маску. Но может быть и слишком сложно..

Прошу прощения.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
mes
Дата 10.12.2009, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(djamshud @  10.12.2009,  21:18 Найти цитируемый пост)
 "x&mask|a&~mask" переставляет биты по заданию


чего то мне кажется, что показанный набор операций оставит число без изменения.   smile  smile 
Вы ничего не упустили ? например сдвиг...
smile 

Это сообщение отредактировал(а) mes - 10.12.2009, 23:13


--------------------
PM MAIL WWW   Вверх
djamshud
Дата 10.12.2009, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



Скомпилировал, запустил.
Цитата

FEDC5678


Или по заданию нужно не это?

>Вы ничего не упустили?

Если правильно понял задание, то нет. Для четырех бит просто маска будет 0xF.

Добавлено через 1 минуту и 55 секунд
>чего то мне кажется, что показанный набор операций оставит число без изменения

Т.е. сам x конечно сохраняется, а распечатывается результат. x=блаблабла, это наверное очевидно;).


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
mes
Дата 11.12.2009, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(djamshud @  10.12.2009,  22:21 Найти цитируемый пост)
Т.е. сам x конечно сохраняется, а распечатывается результат. x=блаблабла, это наверное очевидно;). 

тут теперь я запарился.. принял "a" за "х"... сорри.. но 
Цитата(=Женек= @  10.12.2009,  20:11 Найти цитируемый пост)
имеется 7 бит: yyyxxxx  
нужно взять 3 младшие бита и поместить их на место yyy, 

в любом случае без сдвига не обойтись.. 

Цитата(djamshud @  10.12.2009,  22:21 Найти цитируемый пост)
Для четырех бит просто маска будет 0xF.

с оговоренностью, что  так как битов используется всего 7 и с учетом других условий приведенного случая, можем для 3 бит использовать 4 битовую маску..
хотя имхо логичнее было бы использовать маску  1000 1111b
 smile 



--------------------
PM MAIL WWW   Вверх
djamshud
Дата 11.12.2009, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



Блин. Биты с байтами перепутал, порядок бит перепутал... Лузир, одним словом.)

Пойду ка я в школу.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
=Женек=
Дата 11.12.2009, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: нет
Всего: 1



А посоветуйте где накопать информации и примеров по битовым хитростям. То есть я в принципе знаю что  дают операции &| << >>, но вот практическое их применение типа - вычислить значение бита №n, расположить биты в обратном порядке, заменить биты там-то и там-то...
PM MAIL   Вверх
UniBomb
Дата 11.12.2009, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 97



yyyxxxx = yyyxxxx&0x0F|aaaaaaaa&0x07<<4;


Цитата(=Женек= @  11.12.2009,  13:27 Найти цитируемый пост)
А посоветуйте где накопать информации и примеров по битовым хитростям.

Есть замечательная книга "Алгоритмические трюки для программистов" за авторством Генри Уоррена младшего.

Это сообщение отредактировал(а) UniBomb - 11.12.2009, 12:49


--------------------
PM MAIL ICQ Skype   Вверх
=Женек=
Дата 11.12.2009, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: нет
Всего: 1



Цитата

yyyxxxx = yyyxxxx&0x0F|aaaaaaaa&0x07<<4;

у меня почему-то и без &0x07 работает
PM MAIL   Вверх
mes
Дата 11.12.2009, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(=Женек= @  11.12.2009,  12:16 Найти цитируемый пост)
у меня почему-то и без &0x07 работает 

потому что Вам старший бит не важен..



--------------------
PM MAIL WWW   Вверх
UniBomb
Дата 11.12.2009, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 97



Цитата(=Женек= @  11.12.2009,  14:16 Найти цитируемый пост)
у меня почему-то и без &0x07 работает

Эта конструкция нужна затем, что компьютер не знает такого типа данных, в котором было бы семь бит. Только кратно восьми (ну не будем говорить про компьютеры с альтернативной разрядностью). Соответственно если в аааааааа начиная с 3-го (4-го если считать от 1) будут ненулевые биты, то они перенесутся в yyyxxxx после битов yyy, и получится уже число zyyyxxx (если переменная длинней 8-ми бит, то zzzzzyyyxxx).


--------------------
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0846 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.