Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/16: Рейтинг темы: голосов - 16, средняя оценка - 4.63
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5

Сдвиги

29.01.2010, 16:06. Показов 3086. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо сдвинуть массив беззнаковых целых чисел, как единое число. Обычные сдвиги и циклические ...
Подскажите, пожалуйста

Добавлено через 20 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void wshr(WORD32 * X, int s, int size)
{
    WORD32 t = 0, c = 0;
    for(int i = 0; i < size; i++)
    {
        t       = X[i];
        X[i]    = (t >> s) | c;
        c       = (t << (BITSONWORD - s));
    }
}
void wshl(WORD32 * X, int s, int size)
{
    WORD32 t = 0, c = 0;
    for(int i = size; i > 0; i--)
    {
        t = X[i-1];
        X[i-1] = (t << s) | c;
        c = (t >> (BITSONWORD - s));
    }
}
Написал такие, но они двигают только при значениях сдвига от 1 до 31 ))..
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.01.2010, 16:06
Ответы с готовыми решениями:

Сдвиги (С++)
Создать функцию, которая позволяет в заданном диапазоне натуральных чисел найти и выдать на экран те числа, в двоичном представлении...

Сдвиги. (<< и >>)
Всем привет, подскажите плз, насчёт сдвигов, а то я чилал в инете и что то ничего не понял. Вот например какой будет результат? int x =...

Циклические сдвиги
доброго времени суток, уважаемые форумчане. напишите пожалуйста код к задаче, от этого зависит получу ли я талон или нет: ...

4
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
29.01.2010, 17:31
Например берем s==32 и функцию wshl()
i= size.
t= X[size-1]
X[i-1]= (t<<32) | 0;

И что мы имеем при t<<32 ?
Будет 0.
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
29.01.2010, 17:37  [ТС]
Цитата Сообщение от odip Посмотреть сообщение
И что мы имеем при t<<32 ?
Я не понял, что имеется в виду.
Ведь если на 32 двигать, то первое слово как раз и обнулится.
К тому же я сказал, что они не корректны, просто идея... прошу помощи )..
0
эволюционирую потихоньку
 Аватар для TanT
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
29.01.2010, 18:15
мож это?
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// Циклический сдвиг одномерного массива или строки
 
// итак, нужно преобразовать массив ab в bа. 
// Предположим, что у нас есть функция reverse, 
// переставляющая элементы некоторой части массива в 
// противоположном порядке. В исходном состоянии массив имеет 
// вид ab. Вызвав эту функцию для первой части, получим аrb 
// (прим. редактора:аr - это модифицированная часть a, к которой 
// применили фукнцию перестановки reverse). Затем вызовем ее для 
// второй части: получим аrbr. Затем вызовем функцию для всего 
// массива, что даст (аrbr)r, а это в точности соответствует bа. 
// Посмотрим, как будет такая функция действовать на массив abcdefgh, 
// который нужно сдвинуть влево на три элемента:
// псевдокод: Сдвиг через функцию перестановки reverse   ссылка
// reverse(0, i-1)   /* cba|defgh */
// reverse(i, n-1)   /* cba|hgfed */
// reverse(0, n-1)   /* defgh|abc */
 
#include <iostream>
#include <time.h>
 
 
#define   randomize() srand(time(NULL))
#define   SIZE        10
 
using namespace std;
void Reverse(int *begin, int *end)
{ 
    int temp;
    while (end>begin)
    {
        temp = *begin;
        *begin = *end;
        *end = temp;
        begin++; end--;
    }
} // end Reverse
 
int main()
{
    int A[SIZE];
    int i;
 
    for (i=SIZE; --i>=0;)
        A[i]=i; //rand()%10;
 
    cout<<"A"<<endl;     /// вывод
    for (i=0; i<SIZE; i++)
        cout<<A[i]<<' ';
    cout<<endl;
 
    //////////////////////////////////////////////////////////////////////////
    // сам циклический сдвиг на i элементов
    cout<<"number shift: "; cin>>i;
    Reverse(&A[0], &A[i-1]);
    Reverse(&A[i], &A[SIZE-1]);
    Reverse(&A[0], &A[SIZE-1]);
    //////////////////////////////////////////////////////////////////////////
 
    cout<<"revA"<<endl;     /// вывод
    for (i=0; i<SIZE; i++)
        cout<<A[i]<<' ';
 
    cout<<endl; system("PAUSE");
    return 0;
} // end main
1
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
29.01.2010, 20:13  [ТС]
Цитата Сообщение от TanT Посмотреть сообщение
мож это?
Сдвиг нужен битовый.
Такой алгоритм подойдет, если заиметь реверс битов только нужной части числа.

Добавлено через 33 минуты
Поправил битовый сдвиг вправо, влево будет аналогичен, но что-то коряво как-то смотрится

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void wshr(WORD32 * X, int s, int size)
{
    WORD32 t = 0, c = 0;
    for(int i = 0; i < size; i++)
    {
        t       = X[i];
        X[i]    = (t >> s) | c;
        c       = (t << (BITSONWORD - s));
    }
}
 
void _wshr(WORD32 * X, int s, int size)
{
    WORD32 * T = new WORD32[size];
    memset(T, 0, size);
    for(int i = s/BITSONWORD, j = 0; i < size; i++, j++)
    {
        T[i] = X[j];
    }
    wshr(T, s%BITSONWORD, size);
    wcpy(X, T, size); // копирование массивов
    delete[] T;
}
Вот пример использования (сдвиг на 36 бит) и результат
C++
1
2
WORD32 x[] = { 0x12345678, 0xabcdefff, 0xa1b2c3d4 };
_wshr(x, 36, 3);
Code
1
2
3
4
HEX - 00000000 001234567 8ABCDEFF
BIN - 0000 0000 0000 0000 0000 0000 0000 0000
0000 0001 0010 0011 0100 0101 0110 0111
1000 1010 1011 1100 1101 1110 1111 1111
Теперь можно начинать разбираться с циклическими сдвигами
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.01.2010, 20:13
Помогаю со студенческими работами здесь

Побитовые сдвиги
#include&lt;iostream&gt; int main() { int t=1; while(255&amp;t){ t=t&lt;&lt;t; std::cout&lt;&lt;t&lt;&lt;'\n';} ...

циклические сдвиги
Как организовать циклический сдвиг числа? Например у меня есть число 5. В двоичной системе это выглядит как 0101, и мне нужно сделать так...

Побитовые сдвиги
Был на собеседовании, была задачка, вроде такая: Есть функция, которая принимает char a (1 байт) Нужно определить количество битов,...

Логические сдвиги
Вводим число 'k', где k=2n. Должно вывести 'n'. Решить при помощи логических сдвигов.

Побитовые сдвиги
нужна помощь с заданием на С++: При написании функций можно использовать только следующее: - целочисленные константы; - целочисленные...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru