0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 18
|
|
1 | |
Поменять местами все соседние группы из двух битов в заданом беззнаковом длинном числе11.10.2008, 13:54. Показов 2488. Ответов 8
Метки нет (Все метки)
Задача.
Испольхуя только битовые операции, написать программу, которая меняет местами все соседние групы с 2х битов в заданом беззнаковом длинном числе. Пример с 01001110 сделать 00011011 xxaazzbb = aaxxbbzz каким образом сделать такую программу НЕ ИСПОЛЬЗУЯ: *, /, условные операторы, циклы, рекурсию, ?, : . Помогите розобратьса пож
0
|
11.10.2008, 13:54 | |
Ответы с готовыми решениями:
8
В заданом одномерном массиве поменять местами соседние элементы, стоящие на четных и нечетных местах. В длинном целом числе поменять местами нулевой разряд с первым разрядом В длинном целом числе N числе поменять байты в зеркальном порядке Как в выделенном диапазоне из двух столбцов поменять соседние значения местами. |
10 / 10 / 2
Регистрация: 18.08.2008
Сообщений: 127
|
|
11.10.2008, 19:13 | 2 |
маски и сдвиги
2)xxaazzbb&00110000=00aa0000+2*(сдвиг влево )=aa000000; 3)xxaazzbb&00001100=0000zz00+2*(сдвиг вправо)=000000zz; 4)xxaazzbb&00000011=000000bb+2*(сдвиг влево )=0000bb00; 5)00xx0000+aa000000+000000zz+0000bb00=aaxxbbzz; примечание: (1) и (3) как (2) и (4) можно объединить (сдвиг влево) это умножение на 2[или 10 в десятичной системе ] (сдвиг вправо) это деление на 2 [или 10 в десятичной системе ]
0
|
0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 18
|
||||||
11.10.2008, 19:47 [ТС] | 3 | |||||
Давай отобразим єто в коде
1)xxaazzbb&11000000=xx000000+2*(сдвиг вправо)=00xx0000; 2)xxaazzbb&00110000=00aa0000+2*(сдвиг влево )=aa000000; 3)xxaazzbb&00001100=0000zz00+2*(сдвиг вправо)=000000zz; 4)xxaazzbb&00000011=000000bb+2*(сдвиг влево )=0000bb00; где xxaazzbb = a ? Добавлено через 5 минут 6 секунд int rezultat(long int a Добавлено через 12 минут 50 секунд у мну форум лагает, немогу редактировать =\ Есть еще 1н вопрос, при таком методе хорошо когда битов только 8. В задаче говоритьса о беззнаковом целом длинном числе, которое = unsigned long int = 32 bita..... как быть в таком случае? я думал делать вот так: (пример на 8битном числе) 10 11 01 11 (например єто число введенное пользывателем) сначала сдиваего вправо на 2 позиции, имеем: 00 10 11 01 потом влево: 11 01 11 00 в итоге: нужно с 10 11 01 11 сделать 11 10 11 01, а это додать 2 нижних числа "крестообразным образом 00 10 11 01 ---/-\--/-- 11 01 11 00 --10---01 --/-\--/ 11--11 Можно ли както сделать так ? я смотрел на логические операции.... не особо они мне помогают в таком случае, как по мне лог операции тут и не помогут... Заинтересовалса вот этим: xxaazzbb&11000000 а можна сделать вот так: а1&110011001100 (32 раза, а сдвинутое влево а) a2&001100110011(32 раза, где а2 сдвинутое вправо а ) и потом а1+а2 ?
0
|
10 / 10 / 2
Регистрация: 18.08.2008
Сообщений: 127
|
|
11.10.2008, 20:41 | 4 |
http://content.mail.ru/arch/23186/1596749.html
http://ad.cctpu.edu.ru/cpp/glava3_5.htm или Побитовые операции в с++ в Гугл Поразрядные операции в с++ Там уже прямая дорога . Не хочу у тебя забирать радость самостоятельного написания программы .
0
|
0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 18
|
|
11.10.2008, 23:49 [ТС] | 5 |
я не прошу написать мне программу я прошу задать мне правильное направление поиска информации. Я смотрел битовые операции и не нашел там выхода из ситуации =\\ мб плохо искал =)
0
|
118 / 12 / 3
Регистрация: 21.08.2007
Сообщений: 222
|
||||||
12.10.2008, 11:27 | 6 | |||||
0
|
0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 18
|
|||||||||||
12.10.2008, 18:16 [ТС] | 7 | ||||||||||
Обьесните пож роботу вот этого:
(BITS - (skew)))) И вот это:
& 0x33333333U То, что это битовое И, а что есть 0x33333333U и 0xccccccccU не понимаю =\ Добавлено через 1 минуту 51 секунду * То, что это битовое И я понял, а что есть 0x33333333U и 0xccccccccU не понимаю =\ Не редактирует предыдущий пост =\\
0
|
0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 18
|
|
15.10.2008, 01:27 [ТС] | 8 |
ап
0
|
10 / 10 / 2
Регистрация: 18.08.2008
Сообщений: 127
|
||||||
15.10.2008, 23:58 | 9 | |||||
смотри https://www.cyberforum.ru/newr... =1&p=61681
в 2.4.1 Целые Константы Добавлено через 13 минут 51 секунду
0
|
15.10.2008, 23:58 | |
15.10.2008, 23:58 | |
Помогаю со студенческими работами здесь
9
Список: Необходимо все соседние элементы поменять местами В длинном целом числе N поменять байты в зеркальном порядке В длинном целом числе N поменять байты в зеркальном порядке Написать функцию которая в заданом числе меняет местами два бита с задаными номерами В длинном целом числе n поменять пары двоичных разрядов в зеркальном порядке В длинном целом числе N поменять тетрады (четыре соседних двоичных разряда) в зеркальном порядке Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |