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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.86
Mee
14 / 14 / 1
Регистрация: 05.07.2010
Сообщений: 88
#1

Циклический сдвиг вправо - C++

12.12.2010, 19:55. Просмотров 3821. Ответов 3
Метки нет (Все метки)

Нужно сделать цеклический сдвиг машинного слова на 1 байт влево, через union и через побитовые операции.
Вот так я пишу побитовый сдвиг
C++
1
2
    unsigned D=15;
    cout<<(D<<8|D>>24)<<endl;;
а вот с таким union делаю побитовый сдвиг вот так
C++
1
2
3
4
5
6
7
8
9
10
11
union Word
{
      unsigned int _k;
      struct Word4
      {
            unsigned _byte1: 8;
            unsigned _byte2: 8;
            unsigned _byte3: 8;
            unsigned _byte4: 8;
      } _word;
};
C++
1
2
3
4
5
6
7
8
    unsigned t(0);
    Word b;
    b._k=15;
    t=b._word._byte1;
    b._word._byte1=b._word._byte2;
    b._word._byte2=b._word._byte3;
    b._word._byte3=b._word._byte4;
    b._word._byte4=t;
но выдает совершенно разные значения.
Кажется мне, что я совершенно неправ, просто плохо разбираюсь в этой теме. Где ошибся?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2010, 19:55     Циклический сдвиг вправо
Посмотрите здесь:

Циклический сдвиг массива вправо - C++
дан двумерный массив MxN нужно осуществить поэлементный сдвиг вправо на 1 элемент

Одномерный массив. Циклический сдвиг вправо - C++
Дан массив A размера N и целое число K (1 ≤ K ≤ 4, K &lt; N). Осущест- вить циклический сдвиг элементов массива вправо на K позиций (при...

Произвести циклический сдвиг вправо элементов массива - C++
Люди в Си++ дуб дубом. Помагите очень надо. Вот текст задачи. Ввести одномерный целочисленный массив A, вывести его. Произвести...

Циклический сдвиг прямоугольной матрицы на n элементов вправо - C++
Подскажите пожалуйста в чем ошибка. Надо осуществить циклический сдвиг прямоугольной матрицы на n элементов вправо. int main() { ...

Осуществить циклический сдвиг массива вправо на m позиций - C++
Разработать алгоритм и программу. Дан одномерный массив С размерностью 1хn (1&lt;=n&lt;=20). Элементы массива принимают значения от 0 до 255 и...

Циклический сдвиг вниз и вправо двумерного динамического массива - C++
Прошу помочь написать алгоритм сдвига строк вниз, столбцов вправо. Вверх и влево осилила. Вот моя уже готовая программа. Буду очень...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ХреновыйПрогер
0 / 0 / 0
Регистрация: 23.09.2010
Сообщений: 18
12.12.2010, 20:40     Циклический сдвиг вправо #2
C
1
2
3
typedef unsigned int Integer;
Integer a, b, c;
c= (a << b ) | (a >> (sizeof(Integer)*8-b));
вот правильный циклический сдвиг.
Mee
14 / 14 / 1
Регистрация: 05.07.2010
Сообщений: 88
12.12.2010, 21:14  [ТС]     Циклический сдвиг вправо #3
может быть он и правельный в общем случае, но в моем результат такой же самый

получается тогда ошибка в сдвиге через union? где там ошибка?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2010, 05:44     Циклический сдвиг вправо
Еще ссылки по теме:

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

Циклический сдвиг в младшей тетраде байта на n позиций вправо - C++
Циклический сдвиг в младшей тетради байта на n позиций вправо Ребят поскажите как написать программу,может кто сталкивался с таким

Циклический сдвиг четных строк двумерного массива на k элементов вправо - C++
Помогите, как организовать циклический сдвиг на k элементов вправо? #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;clocale&gt;...

Каким образом осуществить циклический сдвиг на К элементов вправо в массиве? - C++
Объясните пожалуйста ход решения задачи: : В массиве A(N) осуществите циклический сдвиг на K элементов вправо (K &lt; N): последние K...


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

Или воспользуйтесь поиском по форуму:
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.12.2010, 05:44     Циклический сдвиг вправо #4
битовые поля могут по-разному храниться на разных системах
между полями могут быть пустоты
unsigned int может быть равен unsigned short

если хочешь делать через union, делай с массивом char[]
char может иметь или не иметь знака и подвержен переполнению, в случае когда имеет
поэтому, если может быть переполнение, используй unsigned char[]
Yandex
Объявления
13.12.2010, 05:44     Циклический сдвиг вправо
Ответ Создать тему
Опции темы

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