![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
=Женек= |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 20.2.2005 Репутация: нет Всего: 1 |
В общем ТЗ окончательно сформировалась и выглядит несколько по-иному.
Задача следующая: имеется 7 бит: yyyxxxx , из которых 3мя (yyy )нужно управлять, а 4 (xxxx) не трогать есть число из 8 бит типа aaaaaaaa. нужно взять 3 младшие бита и поместить их на место yyy, при этом не тронув биты xxxx. Чтоы получилось в итоге aaaxxxx |
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
ТЗ на лабу?:)
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
=Женек= |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 20.2.2005 Репутация: нет Всего: 1 |
Нет, собственный проект. И делать надо проще и универсальнее, так как работать должно на AVR контроллре.
Уже дошел сам - вот PORTA = (PORTA & 0x8F) | (LINE[jj]<<4) ; |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
>а биты с байтами не перепутали ?
Упс, точно.) >хотя даже в этом случае не нахожу общего с заданием... "x&mask|a&~mask" переставляет биты по заданию. Нужно просто правильно задать маску. Но может быть и слишком сложно.. Прошу прощения. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
чего то мне кажется, что показанный набор операций оставит число без изменения. ![]() ![]() Вы ничего не упустили ? например сдвиг... ![]() Это сообщение отредактировал(а) mes - 10.12.2009, 23:13 |
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
Скомпилировал, запустил.
Или по заданию нужно не это? >Вы ничего не упустили? Если правильно понял задание, то нет. Для четырех бит просто маска будет 0xF. Добавлено через 1 минуту и 55 секунд >чего то мне кажется, что показанный набор операций оставит число без изменения Т.е. сам x конечно сохраняется, а распечатывается результат. x=блаблабла, это наверное очевидно;). -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
тут теперь я запарился.. принял "a" за "х"... сорри.. но
в любом случае без сдвига не обойтись.. с оговоренностью, что так как битов используется всего 7 и с учетом других условий приведенного случая, можем для 3 бит использовать 4 битовую маску.. хотя имхо логичнее было бы использовать маску 1000 1111b ![]() |
||||
|
|||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
Блин. Биты с байтами перепутал, порядок бит перепутал... Лузир, одним словом.)
Пойду ка я в школу. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
=Женек= |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 20.2.2005 Репутация: нет Всего: 1 |
А посоветуйте где накопать информации и примеров по битовым хитростям. То есть я в принципе знаю что дают операции &| << >>, но вот практическое их применение типа - вычислить значение бита №n, расположить биты в обратном порядке, заменить биты там-то и там-то...
|
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
yyyxxxx = yyyxxxx&0x0F|aaaaaaaa&0x07<<4;
Есть замечательная книга "Алгоритмические трюки для программистов" за авторством Генри Уоррена младшего. Это сообщение отредактировал(а) UniBomb - 11.12.2009, 12:49 |
|||
|
||||
=Женек= |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 20.2.2005 Репутация: нет Всего: 1 |
у меня почему-то и без &0x07 работает |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
потому что Вам старший бит не важен.. |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
Эта конструкция нужна затем, что компьютер не знает такого типа данных, в котором было бы семь бит. Только кратно восьми (ну не будем говорить про компьютеры с альтернативной разрядностью). Соответственно если в аааааааа начиная с 3-го (4-го если считать от 1) будут ненулевые биты, то они перенесутся в yyyxxxx после битов yyy, и получится уже число zyyyxxx (если переменная длинней 8-ми бит, то zzzzzyyyxxx). |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |