Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 40, средняя оценка - 4.83
nikitasnv777
2 / 2 / 0
Регистрация: 22.11.2009
Сообщений: 61
#1

Циклический сдвиг битов 2 - C++

22.11.2009, 13:23. Просмотров 5714. Ответов 8
Метки нет (Все метки)

Помогите пожалуйста решить вопрос. Необходимо реализовать на С++ операцию циклического сдвига битов влево и вправо. Поиском наткнулся на это:
Циклический сдвиг битов. Но это не совсем то, что мне нужно.
Имеем переменную "unsigned char bitm" со значением "0b100000", кол-во битов постоянное.
Как мне переместить последний бит в начало или первый бит в конец?

Добавлено через 19 минут
Примерно так должно быть для сдвига влево?
C++
1
2
3
4
unsigned char bitm //длина в 6 бит
unsigned char hi
hi =  (bitm >> 5) & ((1 << 1) - 1);
bitm=(bitm<<1) | hi;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2009, 13:23     Циклический сдвиг битов 2
Посмотрите здесь:

Циклический сдвиг битов! - C++
Очень срочно нужна помощь. Нужно реализовать функцию, которая осуществляет циклический сдвиг битов на 1 бит вправо в левом полубайте...

Циклический сдвиг битов - C++
Создайте функцию, которая перемещает биты для unsigned int на заданное число битов влево, причем выходящие при сдвиге за левую границу...

Циклический сдвиг битов в строке - C++
Пишу шифрование IDEA. Там есть ключ длинной 128 бит. Этот ключ нужно сдвинуть на 25 бит влево... Собственно накалякал сдвиг для...

Циклический сдвиг битов в байте - C++
Привет. Мне нужно в байте (unsigned char) произвести циклический сдвиг. Как я понимаю &gt;&gt; и &lt;&lt; это не циклический сдвиг. Но как сделать...

Циклический сдвиг битов по столбцу в битовой матрице - C++
Нужна програмка которая создаёт матрицу битов 8х8 и дает возможность делать в ней цикличные сдвики вверх(или вниз) то есть биты с...

Циклический сдвиг битов в байте влево или вправо - C++
Кто-нибудь пробовал реализовать такую задачу на С++. Если да, то какой алгоритм? Например, если 32 &lt;&lt; 10, то в результате должны...

Циклический сдвиг - C++
Здравствуйте помогите пожалуйста мне надо все нечетные строки матрицы сдвинуть циклически на К элементов влево. Знаю тут ужас но не...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт CАвтор FAQ
17533 / 5771 / 369
Регистрация: 30.03.2009
Сообщений: 15,872
Записей в блоге: 26
22.11.2009, 13:31     Циклический сдвиг битов 2 #2
А ты в том примере самую первую строку замени на "typedef unsigned char type_t;"
nikitasnv777
2 / 2 / 0
Регистрация: 22.11.2009
Сообщений: 61
22.11.2009, 14:06  [ТС]     Циклический сдвиг битов 2 #3
Сделал таким образом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
unsigned char sdvig_bita_vlevo (unsigned char arg, int n)
{
int bitsize;
unsigned char hi;
bitsize = 6; // битовый размер типа
hi =  (arg >> (bitsize - n)) & ((1 << n) - 1); // Вырезаем старшие n бит
return (arg << n) | hi; //or'ом записываем туда вырезанную старшую часть
}
   
unsigned char sdvig_bita_vpravo (unsigned char arg, int n)
{
int bitsize;
bitsize = 6; // битовый размер типа
return sdvig_bita_vlevo (arg, bitsize - n);
}
Но есть проблема! Едденица и перекидывается и остаётся, тоесть вместо 000001 получается 100001
Evg
Эксперт CАвтор FAQ
17533 / 5771 / 369
Регистрация: 30.03.2009
Сообщений: 15,872
Записей в блоге: 26
22.11.2009, 14:11     Циклический сдвиг битов 2 #4
Покажи весь код, чтобы запустить и повторить можно было
Когда я в прошлый раз писал, то не проверял, просто теоретически написал
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
22.11.2009, 14:11     Циклический сдвиг битов 2 #5
отрезай лишнее, как бы так
C++
1
return ((arg << n) | hi)&0x3F; //or'ом записываем туда вырезанную старшую часть
Evg
Эксперт CАвтор FAQ
17533 / 5771 / 369
Регистрация: 30.03.2009
Сообщений: 15,872
Записей в блоге: 26
22.11.2009, 14:15     Циклический сдвиг битов 2 #6
C
1
bitsize = 6; // битовый размер типа
Я правильно понимаю, что тебе нужно циклически сдвигать только в рамках 6 битов?

Добавлено через 1 минуту
Цитата Сообщение от TanT Посмотреть сообщение
отрезай лишнее, как бы так
C++
1
return ((arg << n) | hi)&0x3F; //or'ом записываем туда вырезанную старшую часть
Если моё предположение выше верно, то лучше так:

C
1
return ((arg << n) | hi) & ((1 << bitsize) - 1);
nikitasnv777
2 / 2 / 0
Регистрация: 22.11.2009
Сообщений: 61
22.11.2009, 14:16  [ТС]     Циклический сдвиг битов 2 #7
Цитата Сообщение от Evg Посмотреть сообщение
Покажи весь код...
C++
1
2
3
4
5
6
7
8
unsigned char sdvig_bita_vlevo (unsigned char arg, int n)
{
int bitsize;
unsigned char hi;
bitsize = 6; // битовый размер типа
hi =  (arg >> (bitsize - n)) & ((1 << n) - 1); // Вырезаем старшие n бит
return (arg << n) | hi; //or'ом записываем туда вырезанную старшую часть
}
в функции void main
C++
1
2
3
4
5
6
7
unsigned char bitm;
int i;
bitm=0b000001;                         
for (i=0; i<10; i++)
   {
   bitm=sdvig_bita_vlevo(bitm, 1);
   }
Evg
Эксперт CАвтор FAQ
17533 / 5771 / 369
Регистрация: 30.03.2009
Сообщений: 15,872
Записей в блоге: 26
22.11.2009, 14:23     Циклический сдвиг битов 2 #8
Или не... тут пораскинуть мозгами надо

Добавлено через 2 минуты
Хотя в посте 6 вроде бы правильно написано

Добавлено через 3 минуты
Собственно, работает
http://codepad.org/QLKvKFQR
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2009, 14:23     Циклический сдвиг битов 2
Еще ссылки по теме:

Циклический сдвиг - C++
Ребята, в чем может быть проблема? Надо организовать ф-цию циклического сдвига вправо. ТО бишь x-&gt;y, y-&gt;z, z-&gt;x. Что я делаю не так? ...

Циклический сдвиг. - C++
Нужно написать вот такую прогу, где нужно сдвинуть число а на n бит влево.

циклический сдвиг - C++
написать программу на СИ (обычном ,НЕ Си++), используя символьные массивы : Если число отрицательных элементов масива А чётно,то...

Циклический сдвиг массива - C++
Напишите программу, которая вводит с клавиатуры непустой массив целых чисел, циклический сдвигает элементы массива вправо на к позиции, и...

Циклический сдвиг влево - C++
Помогите написать программу которая будет осуществлять циклический сдвиг влево введённого числа на N разрядов (например, при сдвиге числа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
nikitasnv777
2 / 2 / 0
Регистрация: 22.11.2009
Сообщений: 61
22.11.2009, 14:23  [ТС]     Циклический сдвиг битов 2 #9
Поставил вариант
C++
1
return ((arg << n) | hi) & ((1 << bitsize) - 1);
и всё заработало!
Спасибо за помощь!
Yandex
Объявления
22.11.2009, 14:23     Циклический сдвиг битов 2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru