Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
V_Ghost
9 / 9 / 1
Регистрация: 03.03.2011
Сообщений: 116
1

реализация ROR и ROL для int

19.01.2013, 19:33. Просмотров 3353. Ответов 31
Метки нет (Все метки)

Помогите реализовать ROR и ROL для чисел типу int, если задано число типу int и количество, на которое идёт сдвиг
ROR/ROL - циклический сдвиг вправо/влево
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2013, 19:33
Ответы с готовыми решениями:

Реализация функции char *padl(const char *string, int len, int c=' ')
Реализовать функцию возвращающую указатель на новую строку длины len,...

Error LNK2019: unresolved external symbol "public: __thiscall Vector<int>::Vector<int>(int,int,int)" (?0?$Vec
Вот есть заголовочный файл // Заголовочный файл Vector.h #ifndef VECTOR_H...

Преобразовать int в const int для установки размера массива
Добрый вечер всем! Столкнулся с такой нестандартной проблемой. Нужно...

Написать функцию SUM (int M, int N) / С++ для начинающих
Написать функцию SUM (int M, int N), которая вычисляет и возвращает сумму всех...

Моя реализация функции перевода string в int
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int...

31
Invader_Zim
Twilight Parasite
154 / 150 / 7
Регистрация: 21.07.2011
Сообщений: 908
19.01.2013, 20:11 2
V_Ghost, проверяеш какой бит перед вылетом.делаеш сдвиг << и потом пихаеш его в хвост. операции | и & в помощь
1
V_Ghost
9 / 9 / 1
Регистрация: 03.03.2011
Сообщений: 116
20.01.2013, 00:35  [ТС] 3
я знаю, как работает циклический сдвиг, но проблема не в этом....
как реализировать циклический сдвиг, если он складается с 4х битов, но в памяти компютера же хранится в 32 (число типа int)?
к примеру число 9, не надо все 32 бита использовать..а только 4, как тогда?интересует вопрос реализации чисел у которых к-во бит меняется динамически.
0
Invader_Zim
Twilight Parasite
154 / 150 / 7
Регистрация: 21.07.2011
Сообщений: 908
20.01.2013, 00:47 4
V_Ghost, << делает сдвиг всему инту, а не одному байту
0
KronoZ93
4 / 4 / 5
Регистрация: 17.01.2013
Сообщений: 27
20.01.2013, 00:48 5
C++
1
2
3
4
5
6
7
8
int fror(int n,int len) //ROR function
{           
    if ( (n%2)==1 )
    {
        return ((n>>len)|0x80);
    }
    return n>>len;
}
аналогично влево
1
V_Ghost
9 / 9 / 1
Регистрация: 03.03.2011
Сообщений: 116
20.01.2013, 00:50  [ТС] 6
KronoZ93,
n - это наше начальное число, которое мы будем сдвигать?
а len - это к-во битов, на которые мы будем сдвигать?
0
KronoZ93
4 / 4 / 5
Регистрация: 17.01.2013
Сообщений: 27
20.01.2013, 00:57 7
Цитата Сообщение от V_Ghost Посмотреть сообщение
KronoZ93,
n - это наше начальное число, которое мы будем сдвигать?
а len - это к-во битов, на которые мы будем сдвигать?
Да.

Добавлено через 1 минуту
Кстате вы не с КИ случайно?)
1
V_Ghost
9 / 9 / 1
Регистрация: 03.03.2011
Сообщений: 116
20.01.2013, 00:57  [ТС] 8
KronoZ93, случайно оттуда)
0
KronoZ93
4 / 4 / 5
Регистрация: 17.01.2013
Сообщений: 27
20.01.2013, 00:58 9
Цитата Сообщение от V_Ghost Посмотреть сообщение
KronoZ93, случайно оттуда)
Який варіант курсака?)
0
V_Ghost
9 / 9 / 1
Регистрация: 03.03.2011
Сообщений: 116
20.01.2013, 01:01  [ТС] 10
KronoZ93, 11
0
KronoZ93
4 / 4 / 5
Регистрация: 17.01.2013
Сообщений: 27
20.01.2013, 01:04 11
Цитата Сообщение от V_Ghost Посмотреть сообщение
KronoZ93, 11
...
0
V_Ghost
9 / 9 / 1
Регистрация: 03.03.2011
Сообщений: 116
20.01.2013, 01:05  [ТС] 12
Цитата Сообщение от KronoZ93 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
int fror(int n,int len) //ROR function
{           
    if ( (n%2)==1 )
    {
        return ((n>>len)|0x80);
    }
    return n>>len;
}
аналогично влево
не работает, я как бы задал сдвиг на 3 число 1010
Должно быть: 0101
получилось: 1(т.е. 0001)
0
KronoZ93
4 / 4 / 5
Регистрация: 17.01.2013
Сообщений: 27
20.01.2013, 01:13 13
Цитата Сообщение от V_Ghost Посмотреть сообщение
не работает, я как бы задал сдвиг на 3 число 1010
Должно быть: 0101
получилось: 1(т.е. 0001)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
int fror(int,int);
int main(){
    int num,len;
    cin>>num>>len;
    cout<<fror(num,len);
    return 0;}
 
 
int fror(int n,int len) //ROR function
{           
    if ( (n%2)==1 )
    {
        return ((n>>len)|0x80);
    }
    return n>>len;
}
проверь в калукуляторе.
если сдвинуть число 10 на 3 то будете переполнение.
0
Toshkarik
1149 / 866 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
20.01.2013, 01:16 14
KronoZ93, Вы видать не совсем понимаете понятие циклического сдвига. Выталкиваемые биты должны помещаться на места новых.
0101 >> 1 == 1010
0110 >> 2 == 1001
1
KronoZ93
4 / 4 / 5
Регистрация: 17.01.2013
Сообщений: 27
20.01.2013, 01:23 15
Цитата Сообщение от Toshkarik Посмотреть сообщение
KronoZ93, Вы видать не совсем понимаете понятие циклического сдвига. Выталкиваемые биты должны помещаться на места новых.
0101 >> 1 == 1010
0110 >> 2 == 1001
так вы посмотрите в калькуляторе как работает ROR.
моя функция делает циклический сдвиг, числа int 4байта (32бит) то есть если чило
число 12 = 1100, сдвинуть на 3 выйдет....
0110
0011
1000 0000 0000 0000 0000 0000 0000 0001
0
V_Ghost
9 / 9 / 1
Регистрация: 03.03.2011
Сообщений: 116
20.01.2013, 01:24  [ТС] 16
KronoZ93,
если 10 => 1010 сдвинуть на 3 влево, то буде в результате 0101(5), никакого переполнение быть в циклическом сдвиге не может, поскольку к-во битов не меняется в операнде и самы бити не изменяются, они просто двигаются
если 10 => 1010 сдвинуть на 3 вправо, то результат будет 0101 (5)
0
Toshkarik
1149 / 866 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
20.01.2013, 01:25 17
KronoZ93, как я понял, ТС нужно только первые 4 бита. Или вообще произвольное число бит.
0
V_Ghost
9 / 9 / 1
Регистрация: 03.03.2011
Сообщений: 116
20.01.2013, 01:29  [ТС] 18
Toshkarik, у меня операнди типа int, но я должен использовать динамически созданное/введеное число
например число 9 - я должен работать только из 4 младшими битами, потомучто при сдвиге единичка в старшем розряде, вместо того что б перейти в 0 младший бит, пойдет в 5 старший бит

Добавлено через 2 минуты
прикол в том, что при динамическом числе мне нужно постоянное динамическое к-во реальных битов в числе, а не все 32, как хранит компютер
0
Toshkarik
1149 / 866 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
20.01.2013, 01:30 19
V_Ghost, и в каком диапазоне? По старшему биту? Ну например:

0000 0000 0000 0100 0010 0000 0000 0000
Какое число должно получится при сдвиги, скажем, влево на 5?
0
KronoZ93
4 / 4 / 5
Регистрация: 17.01.2013
Сообщений: 27
20.01.2013, 01:31 20
Цитата Сообщение от V_Ghost Посмотреть сообщение
Toshkarik, у меня операнди типа int, но я должен использовать динамически созданное/введеное число
например число 9 - я должен работать только из 4 младшими битами, потомучто при сдвиге единичка в старшем розряде, вместо того что б перейти в 0 младший бит, пойдет в 5 старший бит

Добавлено через 2 минуты
прикол в том, что при динамическом числе мне нужно постоянное динамическое к-во реальных битов в числе, а не все 32, как хранит компютер
V_Ghowt если ты делаешь курсач по той же методичке что и я, то вот этот вариант то что надо)
я у препода спрашивал.
0
20.01.2013, 01:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.01.2013, 01:31

Ошибка при компиляции error: cannot convert ‘int (*)[5]’ to ‘int**’ for argument ‘1’ to ‘void Replase(int**)'
#include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;iomanip&gt; #include &lt;cstdlib&gt; ...

В каком случае надо начинать с int main() или с int _tmain( int argc, _TCHAR* argv[] ) и т.д.?
Не понимаю, с чего начинать. Заранее спс.

Что означает ошибка too few arguments to function ‘int my_func(int, int)’ (язык C++)?
В чём проблема? #include &lt;iostream&gt; int my_func (int i, int j){ int z; ...


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

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

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