Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
VAAADIM
2 / 2 / 2
Регистрация: 14.10.2013
Сообщений: 47
1

Циклический сдвиг битов по столбцу в битовой матрице

16.05.2016, 07:42. Просмотров 790. Ответов 2
Метки нет (Все метки)

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

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2016, 07:42
Ответы с готовыми решениями:

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

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

Циклический сдвиг битов 2
Помогите пожалуйста решить вопрос. Необходимо реализовать на С++ операцию циклического сдвига битов...

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

Циклический сдвиг битов в байте
Привет. Мне нужно в байте (unsigned char) произвести циклический сдвиг. Как я понимаю >> и << это...

2
zss
Модератор
Эксперт С++
7460 / 6836 / 4317
Регистрация: 18.12.2011
Сообщений: 18,086
Завершенные тесты: 1
16.05.2016, 08:15 2
Лучший ответ Сообщение было отмечено VAAADIM как решение

Решение

Придумал вот такой вариант (не уверен, что это оптимально, но работает)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
using namespace std;
// Функция перестановки n-го бита в друх байтах 
void SwapBits(unsigned char& c1,unsigned char& c2,int n)
{
    unsigned char mask=1<<(n-1); // маска меняемого бита ( n-го справа)
    unsigned char t1=c1&mask; // меняемый бит первого числа
    unsigned char t2=c2&mask; // меняемый бит второго числа
    c1&=(~mask); // сбросили бит 1 числа
    c1|=t2;   // установили в 1 числе бит второго
    c2&=(~mask);// сбросили бит 2 числа
    c2|=t1; // установили во 2 числе бит 1-го
}
 
int main(void)
{
    unsigned char x[8]={1,2,3,4,5,6,7,8};
    
    for(int i=1;i<8;i++) // переставили биты у всех по очереди
        SwapBits(x[i-1],x[i],3);
    for(int i=0;i<8;i++)
        cout<<(int)x[i]<<' ';
    cout<<endl;
    system("pause");
    return 0;
}
0
VAAADIM
2 / 2 / 2
Регистрация: 14.10.2013
Сообщений: 47
16.05.2016, 17:44  [ТС] 3
Если честно немного не понял, оно сохраняет сброшеные биты?
По заданию оно должно если бит с 0 номером выпал(сместился за границу) то он должен стать вниз на 7 позицию(при смещении вверх) ну и наоборот с 7 на первую если вниз

Добавлено через 9 часов 8 минут
Цитата Сообщение от zss Посмотреть сообщение
Придумал вот такой вариант (не уверен, что это оптимально, но работает)
C++Выделить код
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
using namespace std;
// Функция перестановки n-го бита в друх байтах
void SwapBits(unsigned char& c1,unsigned char& c2,int n)
{
* * unsigned char mask=1<<(n-1); // маска меняемого бита ( n-го справа)
* * unsigned char t1=c1&mask; // меняемый бит первого числа
* * unsigned char t2=c2&mask; // меняемый бит второго числа
* * c1&=(~mask); // сбросили бит 1 числа
* * c1|=t2; * // установили в 1 числе бит второго
* * c2&=(~mask);// сбросили бит 2 числа
* * c2|=t1; // установили во 2 числе бит 1-го
}
int main(void)
{
* * unsigned char x[8]={1,2,3,4,5,6,7,8};
for(int i=1;i<8;i++) // переставили биты у всех по очереди
* * * * SwapBits(x[i-1],x[i],3);
* * for(int i=0;i<8;i++)
* * * * cout<<(int)x[i]<<' ';
* * cout<<endl;
* * system("pause");
* * return 0;
}
мне надо что бы они как бы в матрице были то есть примерно вид:
1
2
3
...
8 (то есть матрица 8х8 бит)
и можно было циклично в них биты в столбце заданом двигать

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <bitset>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "russian");
 
 
    cout << "Введите значение в двоичном виде: ";
    const int count_bits = sizeof(char) * 8;
    bitset<count_bits> setOfBits;
    cin >> setOfBits;
 
    cout << "Введите число сдвигаемых бит: ";
    unsigned int sbits;
    cin >> sbits;
 
    for (unsigned i = 0; i < sbits; ++i)
    {
        bool head_bit = setOfBits[count_bits - 1];
        setOfBits <<= 1;
        setOfBits[0] = head_bit;
    }
 
    cout << "Результат: " << setOfBits << endl;
    system("pause");
    return 0;
}
Вот тут реализовано внутри 1 строки влево а нужно так же что бы биты вверх или вниз ходили

Добавлено через 13 минут
в общем что-то на подобие перемещения внутри битсет матрицы
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2016, 17:44

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

Осуществить циклический сдвиг битов в целом числе a на k позиций вправо
Осуществить циклический сдвиг битов в целом числе a на k позиций вправо.

Циклический сдвиг в матрице
Всем добрый день! Необходима помощь. Задание такое: Дана матрица int matr. Используя функции, ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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