написать макрос, Си |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
написать макрос, Си |
blackhard |
Сообщение
#1
|
Бывалый Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: 0 |
Написать макрос, реализующих циклические перестановки (влево-вправо) на k бит, первых n бит, 32-хбитовоц структуры (unsigned).Обьясните ктонибудь что за циклические перестановки ?Ато я никак не могу врубиться
|
volvo |
Сообщение
#2
|
Гость |
Стой, стой... Не так... Я сразу не очень внимательно прочел задание...
Тебе надо не просто циклически сдвинуть число на сколько-то бит, тебе надо сдвинуть N первых бит числа циклически на K бит. То есть, если возьмем N = 5, K = 3 и 32-битное число s: 00110101 00001010 00000000 000000002 = (13578 * 65536)10 (для простоты я рассматриваю только первые 16 бит, остальные пусть будут нулевыми, это как раз и даст умножение на 216 = 65536), то "зацикливать" надо только первые 5 бит, остальные должны остаться на своих местах, т.е., результат будет: XXXXX101 00001010 00000000 000000002, где выделенный фрагмент - это N (5 этом случае) бит 00110, сдвинутые циклически на K (т.е, на 3) : было 00110 стало 10001 Итого получаем: 10001101 00001010 00000000 000000002 = (36106 * 65536)10... Теперь другое. Не стОит сразу бросаться и писать макросы. Их очень сложно отлаживать, поэтому сначала пишется программка, в которой это все делается без макросов, обычным способом: #include <stdio.h>Как видишь, получилось именно 36106, значит, фрагмент работает правильно. Сделай аналогичные преобразования для сдвига вправо, чтоб оно работало правильно, а потом уже преобразуй в макрос... |
Текстовая версия | 4.05.2024 12:03 |