Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

12.12.2010, 19:55. Просмотров 3962. Ответов 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;
но выдает совершенно разные значения.
Кажется мне, что я совершенно неправ, просто плохо разбираюсь в этой теме. Где ошибся?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2010, 19:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Циклический сдвиг вправо (C++):

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

Циклический сдвиг массива влево и вправо - C++
Нужно реализовать циклический сдвиг массива влево и вправо! Например есть массив int- {121605}? mass_len=6, нужно чтобы после сдвига...

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

Циклический сдвиг элементов массива вправо на К позиций - C++
Дан массив размера N и число К (0&lt;k&lt;5, K&lt;n) Осуществить циклический сдвиг элементов массива вправо на К позиций .

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

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

3
ХреновыйПрогер
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));
вот правильный циклический сдвиг.
0
Mee
14 / 14 / 1
Регистрация: 05.07.2010
Сообщений: 88
12.12.2010, 21:14  [ТС] #3
может быть он и правельный в общем случае, но в моем результат такой же самый

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

если хочешь делать через union, делай с массивом char[]
char может иметь или не иметь знака и подвержен переполнению, в случае когда имеет
поэтому, если может быть переполнение, используй unsigned char[]
0
13.12.2010, 05:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2010, 05:44
Привет! Вот еще темы с ответами:

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

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

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

Осуществить циклический сдвиг элементов массива вправо на k позиций - C++
Решаю задачи на сервере одном, задание было &quot;Дан массив размера N ≥ 2 и число k (0 &lt; k &lt; N). Осуществить циклический сдвиг элементов...


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

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

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