|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.06.2012, 16:27 | #1 |
Пользователь
Регистрация: 31.03.2012
Сообщений: 33
|
Проблема с программой. Побитовые операторы. Си.
Задача:Напишите функцию setbits(x, p, n , y ) , возвращающую
значение х, в котором п битов, начиная с р-й позиции, заменены на п правых разрядов из у (остальные биты не изменяются). Только начал изучать си. Прочитал про побитовые операторы, но в целом не очень понял. Хотелось бы увидеть от вас код данной программы с соответствующими объяснениями. Заранее спасибо. |
10.06.2012, 17:49 | #2 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,289
|
Код:
4095=0000 0000 0000 0000 0000 1111 1111 1111 нумерация с 0 до 31 бита слева направо. (*x)<<p, где p=24 -0000 0000 0000 0000 0000 1111 1111 1111 -> 1111 1111 0000 0000 0000 0000 0000 0000 (*x)<<p>>(32-n), где n=4 - 1111 1111 0000 0000 0000 0000 0000 0000 -> 0000 0000 0000 0000 0000 0000 0000 1111 (*x)<<p>>(32-n)<<(32-p-n) - 0000 0000 0000 0000 0000 0000 0000 1111 -> 0000 0000 0000 0000 0000 0000 1111 0000 Таким образом выделили N бит, начиная с P позиции в исходном числе: 0000 0000 0000 0000 0000 1111 1111 1111 0000 0000 0000 0000 0000 0000 1111 0000 ~((*x)<<p>>(32-n)<<(32-p-n)) инвертируем биты: 1111 1111 1111 1111 1111 1111 0000 1111 Таким образом, получилась маска, в которой на местах, не требующих замены, единички, а на местах, требующих замены, биты, инвертированные относительно исходного числа. Затем логическим "И" обнуляем требуемые биты, т.к. a and (not a)=0. y<<(32-n)>>p - обнуляем первые 32-n бит числа Y, т.е. выделяем правые n бит, и ставим их позицию с p бита. Командой логического "ИЛИ" соединяем биты в одно число. ПС Это один из вариантов решения, коих можно придумать еще немало. Без указателей: Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
Последний раз редактировалось BDA; 10.06.2012 в 18:17. |
10.06.2012, 18:07 | #3 |
Пользователь
Регистрация: 31.03.2012
Сообщений: 33
|
А можно как-нибудь без указателей?
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
проблема с программой | crazyW | Помощь студентам | 0 | 17.01.2012 20:15 |
Побитовые операторы (number && + number | 0 || 0) | Викдон | JavaScript, Ajax | 0 | 05.10.2011 20:34 |
классы, операторы. Проблема this, op= [c++] | icyFairy | Помощь студентам | 4 | 09.03.2010 20:37 |
Проблема с программой | eks-s | Общие вопросы Delphi | 9 | 06.02.2008 09:47 |